首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询mongoRepository列表

查询mongoRepository列表
EN

Stack Overflow用户
提问于 2019-04-26 15:06:14
回答 2查看 3.5K关注 0票数 0

我有一个带有以下字段的文档的MongoDB集合:

  • 日期(日期obj)
  • offerType (str)

我想用MongoRepository 编写一个方法,查找在日期范围内有日期的所有文档,而offerType包含列表中提供的字符串之一。

示例

文档:

  1. 日期:10-04-2019年,offerType: offer1
  2. 日期:11-04-2019年,offerType: offer3
  3. 日期:15-04-2019年,offerType: offer2
  4. 日期:15-04-2019年,offerType: offer1

我要:

  • 日期:9-04-2019年和12-04-2019年
  • 以下报价: offer1,offer3

在前面的示例中,我将获得文档1和2。

我的代码

我使用MongoRepository和一个自定义对象,该对象包含我需要的字段:

代码语言:javascript
复制
import java.util.Date;
import java.util.List;

import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;     
public interface ReportVocalOrderRepository extends MongoRepository<ReportVocalOrder, String> {

    List<ReportVocalOrder> findByDateBetween(Date startDate, Date endDate, Pageable pageable);

    List<ReportVocalOrder> findByDateBetweenAndOfferTypeContaining(Date startDate, Date endDate, List<String> offers, Pageable pageable);


}

以下是文档类:

代码语言:javascript
复制
@JsonInclude(Include.NON_NULL)
@Document(collection = Constants.Mongo.Collections.VOCAL_ORDER_REPORT)
@ApiModel
public class ReportVocalOrder {

    @Id
    private String id;

    private Date date;
private String offerType;
public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }
public String getOfferType() {
        return offerType;
    }

    public void setOfferType(String offerType) {
        this.offerType = offerType;
    }
}

MongoRepository的第一个方法工作得很好;第二个方法则返回一个空列表。

问题是查询mongoRepository以搜索可以包含作为参数传递的列表中的一个值的字段。

这个实现有什么问题?有更好的方法来实现这个查询吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-26 15:51:51

比我想象的要简单。我发表了一个对谁感兴趣的答复:

代码语言:javascript
复制
import java.util.Date;
import java.util.List;

import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;     
public interface ReportVocalOrderRepository extends MongoRepository<ReportVocalOrder, String> {

    List<ReportVocalOrder> findByDateBetweenAndOfferTypeIn(Date startDate, Date endDate, List<String> offers, Pageable pageable);


}

所以重点是使用关键字In

票数 1
EN

Stack Overflow用户

发布于 2019-05-02 07:34:25

我们还有另一个使用查询的选项

代码语言:javascript
复制
@Query(value = "{ 'groupId' :  ?0 , 'user.$id' : {$in: ?1} }", delete = true)
    List<GroupUser> deleteUserInGroup(String groupId, List<ObjectId> userId);

你可以试试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55870340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档