我有一个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以搜索一个字段,该字段可以包含作为参数传递的列表的值之一。
此实现有什么问题?有更好的方法来实现此查询吗?
答案 0 :(得分:0)
这比我想的要简单。我发布了对谁感兴趣的答案:
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 :(得分:0)
我们还有使用查询的另一种选择
@Query(value = "{ 'groupId' : ?0 , 'user.$id' : {$in: ?1} }", delete = true)
List<GroupUser> deleteUserInGroup(String groupId, List<ObjectId> userId);
您可以尝试。