查询 mongoRepository 列表
Query for mongoRepository list
我有一个 MongoDB 集合,其中包含具有以下字段的文档:
- 日期(日期对象)
- offerType (str)
我想用 MongoRepository 编写一个方法来查找日期在日期范围内并且 offerType 包含列表中提供的字符串之一的所有文档。
例子
文件:
- 日期:2019 年 4 月 10 日,报价类型:报价 1
- 日期:2019 年 4 月 11 日,报价类型:报价 3
- 日期:2019 年 4 月 15 日,报价类型:报价 2
- 日期:2019 年 4 月 15 日,报价类型:报价 1
我要:
- 9-04-2019 和 12-04-2019 之间的日期
- 以下优惠:优惠 1、优惠 3
在前面的示例中,我将获取文档 1 和 2。
我的代码
我使用 MongoRepository 和一个包含我需要的字段的自定义对象:
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);
}
这是文档class:
@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 的第一个方法工作正常;第二个 returns 一个空列表。
问题是 查询 mongoRepository 以搜索可以包含作为参数传递的列表值之一的字段 。
这个实现有什么问题?有没有更好的方法来实现这个查询?
比我想象的要简单。我post一个有兴趣的人回答:
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
。
我们还有另一种选择来使用查询
@Query(value = "{ 'groupId' : ?0 , 'user.$id' : {$in: ?1} }", delete = true)
List<GroupUser> deleteUserInGroup(String groupId, List<ObjectId> userId);
你可以试试
我有一个 MongoDB 集合,其中包含具有以下字段的文档:
- 日期(日期对象)
- offerType (str)
我想用 MongoRepository 编写一个方法来查找日期在日期范围内并且 offerType 包含列表中提供的字符串之一的所有文档。
例子
文件:
- 日期:2019 年 4 月 10 日,报价类型:报价 1
- 日期:2019 年 4 月 11 日,报价类型:报价 3
- 日期:2019 年 4 月 15 日,报价类型:报价 2
- 日期:2019 年 4 月 15 日,报价类型:报价 1
我要:
- 9-04-2019 和 12-04-2019 之间的日期
- 以下优惠:优惠 1、优惠 3
在前面的示例中,我将获取文档 1 和 2。
我的代码
我使用 MongoRepository 和一个包含我需要的字段的自定义对象:
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);
}
这是文档class:
@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 的第一个方法工作正常;第二个 returns 一个空列表。
问题是 查询 mongoRepository 以搜索可以包含作为参数传递的列表值之一的字段 。
这个实现有什么问题?有没有更好的方法来实现这个查询?
比我想象的要简单。我post一个有兴趣的人回答:
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
。
我们还有另一种选择来使用查询
@Query(value = "{ 'groupId' : ?0 , 'user.$id' : {$in: ?1} }", delete = true)
List<GroupUser> deleteUserInGroup(String groupId, List<ObjectId> userId);
你可以试试