如何找到具有相同价值的MongoDB文档并统计它们?

时间:2014-08-29 23:47:48

标签: mongodb mongodb-query mongodb-java nosql

在MongoDB中,我需要使用组聚合(我相信),以便获得具有相同值的集合中的文档数量。我需要从最大到最小的时间将这些结果返回给我,然后获得每个结果的公共值。

例如

  1. 我有一个范围的正常查询(例如,字段“值”> 5)。我假设我应该在聚合

  2. 时使用“匹配”功能
  3. 获取“id”字段具有相同值的所有文档,这些文档也与上述查询参数匹配

  4. 将大多数匹配值的结果排序为最小

  5. 为每个结果提供“id”的公共值。

  6. 示例文件:

        #1. Type: "Like", value: 6, id: 123
        #2. Type: "Like", value: 7, id: 123
        #3. Type: "Like", value: 7, id: 123
        #4. Type: "Like", value: 8, id: 12345
        #5. Type: "Like", value: 7, id: 12345
        #6. Type: "Like", value: 6, id: 1234
        #7. Type: "Like", value: 2, id: 1234
        #7. Type: "Like", value: 2, id: 1234
        #7. Type: "Like", value: 2, id: 1234
    

    预期输出(假设我有3个文档的限制,并且查询仅询问具有“值”字段> 5的文档:

    1. id: 123
    2. id: 12345
    3. id: 1234
    

    我期望这些顺序,因为id 123是最受欢迎的,而1234是最不受欢迎的,其中“value”字段> 5。

    理想情况下,我会有一个方法可以按顺序返回结果ID的字符串[]。

1 个答案:

答案 0 :(得分:1)

db.data.aggregate([
    {$match: {value:{$gt:5}}},
    {$group: {'_id':"$id", num:{$sum:1}, avg:{$avg:"$value"}}},
    {$sort:{num:-1}}, { $limit : 50}
])