【发布时间】:2014-08-16 00:12:16
【问题描述】:
我正在使用聚合管道概念,下面是我使用的 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 运算符来计算 count 值(例如,if { count : { $gte : 5 } } 然后继续 $project else 退出)。
谁能帮我解决这个问题。
【问题讨论】:
-
我不明白这一点。由于分组
_id为空,您所做的只是获取匹配文档的数量。在基本查询中使用.count()修饰符会更有效。 -
是的..我在比赛前尝试了 .count() 并且 if(count>=5) 我继续使用 $match,它有效。 count() 将扫描集合中的所有文档并给出结果。接下来我会做$match,它也会扫描所有文件。 (count() 和 $match 在同一个“field_name”上)。所以想到在 $group 中使用计数。 (如果我使用 $match,next $sum,与将扫描所有文档的 count() 相比,扫描文档的数量会更少)
-
请帮我解决另一个问题。链接是-stackoverflow.com/questions/25167849/…
标签: mongodb