MongoDB聚合管道中计算的计数值的比较运算符

时间:2014-08-13 13:50:01

标签: mongodb

我正在使用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 退出。)

有没有人可以帮我解决这个问题。

2 个答案:

答案 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)
}

如果不了解更多关于你的更大目标的内容,很难为此提供良好的代码。