如何将数字数组转换为对象数组,数字是它们的属性?

时间:2015-11-10 15:45:54

标签: mongodb mongodb-query aggregation-framework

我有以下doc方案:

{
    "_id": 123123123,
    "linhas": [1,2,3]
}

我希望所有人都转向以下方案:

{
    "_id": 123123123,
    "linhas": [{
        "id":1,
        "duracao": 14
    },{
        "id":2,
        "duracao": 14
    },{
        "id":3,
        "duracao": 14
    }]
}

换句话说,我希望数组中的所有数字都变成同一数组中的对象ID。我怎么能用mongo查询呢?

1 个答案:

答案 0 :(得分:2)

您可以使用.aggregate()方法,如下所示:

db.collection.aggregate([
    { "$unwind": "$linhas" }, 
    { "$group": { 
        "_id": "$_id", 
        "linhas": { 
            "$push": { 
                "id": "$linhas", 
                "duracao": { "$literal": 14 }
            }
        }
    }}
])

返回:

{ 
        "_id" : 123123123,
        "linhas" : [
                {
                        "id" : 1,
                        "duracao" : 14
                },
                {
                        "id" : 2,
                        "duracao" : 14
                },
                {
                        "id" : 3,
                        "duracao" : 14
                }
        ]
}

你需要解构你的" linhas"数组使用$unwind运算符然后$group您的文档由" _id"并使用$push累加器运算符返回子文档数组。当然$literal运算符允许您设置新字段的值" duracao"。