如何获得汇总-$ group在$ addFields上计数结果?

时间:2018-10-19 08:33:51

标签: mongodb mongodb-query aggregation-framework

我有以下查询。

   db.Collection.aggregate([
  {
        "$match":{
            "index": 1
                 }
  },

  {
        "$addFields":{
            "DATE": $var1
            "array":"$array1
                     }
  }

])

这是查询的结果。

OUTPUT1

    {
        "DATE" : 181019
        "array" : 100,101,105,106,201,205,208,209
    }
...
...

,我将获得$ group的结果。 我将使用$ array1。

    db.Collection.aggregate([
  {

        {
         $group:{
             "_id":"$array1",
             "count":{"$sum" : 1}
                }
        },

        {
        $sort: {"count" : -1}

        }


  }
])

OUTPUT2

{
 "_id" : [
100,
101,
105,
106,
201,
205,
208,
209],

"count" : 4.0

}

“计数”结果将复制到所有结果中。

但是$ group的结构不好以读取所有数据。

如何将所有 OUTPUT1 OUTPUT2 的$ group“计数”合并?

     {
            "$addFields":{
                "DATE": $var1
                "array":"$array1
                "count": $count
                         }
      }

使用$ group“计数”,但我不希望$ group结构。

   {
        "DATE" : 181019
        "array" : 100,101,105,106,201,205,208,209
        "count" : 4.0
    },
    {
        "DATE" : 181019
        "array" : 103,104,105,106,201,205,208,210
        "count" : 12.0
     }
...
...

1 个答案:

答案 0 :(得分:0)

mongo group query how to keep fields

我找到了我想要的。 答案是$ group技巧。

首先,将$ addfield的查询移至$ group {query}。

其次,将{$ first:{}}添加到$ addfield的查询中 这使得$ addfield的查询$ group查询。

$group:{
_id: $group_var,
name:{$first:{$addfield's query}}
"count": $count
}

这是将其放入的结果。

 db.Collection.aggregate([
  {

        {
         $group:{
             "_id":"$array1",
             "array":{"$first":"$array1}
             "count":{"$sum" : 1}
                }
        },

        {
        $sort: {"count" : -1}

        }


  }
])