我有一个带有以下字段的文档的MongoDB集合:
我想用MongoRepository 编写一个方法,查找在日期范围内有日期的所有文档,而offerType包含列表中提供的字符串之一。
示例
文档:
我要:
在前面的示例中,我将获得文档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);
}以下是文档类:
@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以搜索可以包含作为参数传递的列表中的一个值的字段。
这个实现有什么问题?有更好的方法来实现这个查询吗?
发布于 2019-04-26 15:51:51
比我想象的要简单。我发表了一个对谁感兴趣的答复:
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。
发布于 2019-05-02 07:34:25
我们还有另一个使用查询的选项
@Query(value = "{ 'groupId' : ?0 , 'user.$id' : {$in: ?1} }", delete = true)
List<GroupUser> deleteUserInGroup(String groupId, List<ObjectId> userId);你可以试试。
https://stackoverflow.com/questions/55870340
复制相似问题