mongodb将重复文档分组到一个数组中

mongodb将重复文档分组到一个数组中,mongodb,Mongodb,我试图将特定密钥的所有文档组织成一个数组。如果任何其他参数不同,我不希望一次又一次地获得相同的键元素。 样本文件:- { name:"sweta", age:23 address:india, hobby:singing }, { name:"john", age:24 address:germany, hobby:singing }, { name:"peter", age:24 address:india

我试图将特定密钥的所有文档组织成一个数组。如果任何其他参数不同,我不希望一次又一次地获得相同的键元素。 样本文件:-

{
    name:"sweta",
    age:23
    address:india,
    hobby:singing
},
{
    name:"john",
    age:24
    address:germany,
    hobby:singing
},
{
    name:"peter",
    age:24
    address:india,
    hobby:dancing
},
{
    name:"marry",
    age:23
    address:india,
    hobby:singing
},
我试过什么

return db.aggregate([
 {
       $match:{age:23}
 },
 {
       "$group":{
           "_id": {"age":"$age"},
        }
 },
 {   
       "$group":{
           "_id":"$_id.age",
           "name":{ $first: "$_id.name"},
           "address":{ $first: "$_id.address"},
           "hobby":{ $first: "$_id.hobby"},
  }
])
基本上,这种格式的分组减少了最大的业务逻辑

预期答案=

  [
      {
        "23":[
                {name:"sweta",address:india,hobby:singing},
                {name:"marry",address:india,hobby:singing},
             ]
       },
       {
          "24":[
                {name:"john",address:germany,hobby:singing},
                {name:"peter",address:france,hobby:singing}
             ]
         }

 ]
有人知道怎么做吗?

你可以试试这个

db.getCollection('Test').aggregate([
{ $group: { _id: "$age" , 
    data: { $push: {"name":"$name", "address":"$address", "hobby":"$hobby"}},    
    }
},
{ "$replaceRoot": {
    "newRoot": { 
      "$arrayToObject": {
        "$concatArrays": [
          [
            { "k": {$toString: "$_id"}, "v": "$data"  }
          ]
        ]
      } 
    }
  }}
])
结果:

[ {
    "24" : [ 
        { "name" : "john", "address" : "germany", "hobby" : "singing" }, 
        { "name" : "peter", "address" : "india", "hobby" : "dancing" }
    ]
},
{
    "23" : [ 
        { "name" : "sweta", "address" : "india", "hobby" : "singing" }, 
        { "name" : "marry", "address" : "india", "hobby" : "singing" }
    ]
}]