Mongodb聚合并返回多个文档值

时间:2014-04-30 22:26:08

标签: mongodb aggregation-framework

假设我有以下JSON结构,我想按性别分组,并希望在同一字段中返回多个文档值:

[
    {
        "id": 0,
        "age": 40,
        "name": "Tony Bond",
        "gender": "male"
    },
    {
        "id": 1,
        "age": 30,
        "name": "Nikki Douglas",
        "gender": "female"
    },
    {
        "id": 2,
        "age": 23,
        "name": "Kasey Cardenas",
        "gender": "female"
    },
    {
        "id": 3,
        "age": 25,
        "name": "Latasha Burt",
        "gender": "female"
    }
] 

现在我知道我可以做这样的事情,但我需要将年龄和名字加入一个字段

.aggregate().group({ _id:'$gender', age: { $addToSet: "$age" }, name: { $addToSet: "$name"}})

2 个答案:

答案 0 :(得分:1)

是的,你可以,只需要一个子文件作为参数:

db.collection.aggregate([
    { "$group": {
        "_id": "$gender",
        "person": { "$addToSet": { "name": "$name", "age": "$age" } }
    }}
])

当然,如果你真的希望这里没有重复,那么$push会做同样的事情:

db.collection.aggregate([
    { "$group": {
        "_id": "$gender",
        "person": { "$push": { "name": "$name", "age": "$age" } }
    }}
])

答案 1 :(得分:0)

除了Neil为聚合查询提到的内容之外,您还必须考虑这样一个事实,即包含分组的单个记录的文档不能超过16 MB(在v2.5 +中),或者整个聚合结果不能超过16MB(在v2.4及以下)。

因此,如果您拥有庞大的数据集,您必须了解可能对用于聚合数据的模型施加的限制。