如何在Mongodb中的另一个数组中添加数组?

时间:2014-03-04 06:14:37

标签: mongodb aggregation-framework

我想要这种格式的输出:

abc: [
       { a:' ', b:' ',
         c:[ {c1:' ', c2:' '}, {c1:' ', c2:' '}, {c1:' ', c2:' '}]
       },

       { a:' ', b:' ',
         c:[ {c1:' ', c2:' '}, {c1:' ', c2:' '}, {c1:' ', c2:' '}]
       }
]

对于此输出,我正在尝试此查询:

db.test.aggregate(

{
    $group:
    {
        _id: "$clientId",
        abc:{
            $push:{
                "a":"$a",
                "b":"$b",
                c:{
                    $addToSet:{ 
                        "c1":"$c1",
                        "c2":"$c2"
                    }
                },
            }
        }
    }
}

使用这个我只在结果数组中得到C数组,而不是A和B值。

请帮帮我。

1 个答案:

答案 0 :(得分:0)

在聚合框架中需要使用两个group by子句,因为我们不能在同一个组块中创建两个数组。

以下是具有所需输出的查询:

db.test.aggregate(
    {$group:{
        _id:{"a": "$a","langName": "$b"},
        c:{$addToSet:{ 
            "c1":"$c1",
            "c2":"$c2"
            }}
        }

        }
    ,
    {$group: {
            _id: "$_id",
            abc:{$addToSet:{
               "a":"$_id.a",   //gets the upper a element of _id of above group
               "b":"$_id.b",
            c:"$c"     // gets the full array that has been formed in the above group by.
            }
        }        
    }
    }
    )

我一直在尝试使用$ a而不是$ _id.a这就是我遇到问题的原因。 这个查询解决了我的问题。 :)