我正在使用Aggregation Pipeline概念,下面是我使用的Java代码。
DBObject match = new BasicDBObject("$match",
new BasicDBObject("field_name", "value"));
DBObject group = new BasicDBObject("$group",
new BasicDBObject("_id" , "")
.append("count", new BasicDBObject("$sum", 1)));
第一个管道运营商" $ match"将过滤掉文件。第二个管道运营商" $ group"将给出集合中的文档数量(在上面的例子中)。让我们说,第三个管道运营商是$ project。
List<DBObject> pipeline = Arrays.asList(match, group, project);
AggregationOutput output = users.aggregate(pipeline);
我想要执行的操作是这样的 - 我想使用 $ gte 运算符来计算计数值(例如, if {count:{$ gte:5}}然后继续$ project else 退出。)
有没有人可以帮我解决这个问题。
答案 0 :(得分:0)
我认为你可以再次使用$ match作为第三个管道运算符,链接:DBObject match2 = BasicDBObjectBuilder.start()。push(“$ match”)。push(“count”)。append(“$ gte “,5).get();
答案 1 :(得分:0)
使用两个查询:count()
,检查阈值,然后在必要时使用投影find()
。据我所知,你不能根据某些条件提前终止聚合,所以虽然我认为你可以构建一个准确满足你需求的管道,但实际上你应该做最自然的事情。在mongo shell中,因为我没有使用Java驱动程序进行测试:
> var t = db.test.count({ "field" : "value" })
> if (t > 5) {
results = db.test.find({ "field" : "value"}, projection)
}
如果不了解更多关于你的更大目标的内容,很难为此提供良好的代码。