在Feed集合中,“likeCount”和“commentCount”是两列。我想获取所有文档,其中“likeCount”+“commentCount”大于100.如何在Spring Mongo DB中编写搜索过滤器查询?
以下是我的样本Feed集合数据。
{
"_id" : ObjectId("55deb33dcb9be727e8356289"),
"channelName" : "Facebook",
"likeCount" : 2,
"commentCount" : 10,
}
对于比较单字段,我们可以编写搜索查询,如:
BasicDBObject searchFilter = new BasicDBObject();
searchFilter.append("likeCount", new BasicDBObject("$gte",100));
DBCursor feedCursor = mongoTemplate.getCollection("feed").find(searchFilter);
答案 0 :(得分:1)
试试这个
db.collection.aggregate([{$项目:{总:{ '$添加':[ “$ likeCount”, “$ commentCount”]}}},{$匹配:{总:{$ GT:100 }}}])
答案 1 :(得分:1)
您需要在Spring Data MongoDB中使用 MongoDB Aggregation Framework 。在Spring Data中,以下内容使用聚合框架返回所有使用组合的赞和评论计数大于100的订阅源。 :
<强>实体强>
class FeedsCount {
@Id String id;
String channelName;
long likeCount;
long commentCount;
long totalLikesComments;
//...
}
<强>聚合强>
import static org.springframework.data.mongodb.core.aggregation.Aggregation.*;
Aggregation agg = newAggregation(Feed.class,
project("id", "channelName", "likeCount", "commentCount")
.andExpression("likeCount + commentCount").as("totalLikesComments"),
match(where("totalLikesComments").gt(100))
);
//Convert the aggregation result into a List
AggregationResults<FeedsCount> groupResults
= mongoTemplate.aggregate(agg, FeedsCount.class);
List<FeedsCount> results = groupResults.getMappedResults();
newAggregation
静态工厂方法创建一个新的聚合,并将聚合操作列表传递给该方法。这些聚合操作定义聚合的聚合管道。"id"
,"channelName"
,"likeCount"
,"commentCount"
字段,然后添加新字段{{1这是一个存储"totalLikesComments"
和"likeCount"
字段之和的计算属性。