如何在MongoDB中将数组转换为对象?

例如,我要转换此文档:

{
"_id" : NumberLong(279),
"userAddressList" : [
    {
        "street" : "Street",
        "house" : "House",
        "building" : "Building",
        "flat" : NumberLong(0),
        "entrance" : NumberLong(0),
        "floor" : NumberLong(0),
        "intercom" : "Intercome"
    }
        ],
}

对此:
{
"_id" : NumberLong(279),
"userAddressList" :
    {
        "street" : "Street",
        "house" : "House",
        "building" : "Building",
        "flat" : NumberLong(0),
        "entrance" : NumberLong(0),
        "floor" : NumberLong(0),
        "intercom" : "Intercome"
    },
}

所以我需要将""userAddressList" : [{..}]"转换为""userAddressList" : {..}"

最佳答案

对于MongoDB 4.2和更高版本的

您可以尝试以下查询,该查询在更新中使用聚合管道:

db.collection.updateMany(
    {},
    [
        { '$addFields': {
            'userAddressList': {
                '$arrayElemAt': ['$userAddressList', 0]
            }
        } }
    ]
)

对于较旧的MongoDB版本:
db.collection.find().forEach(function(doc){
    userAddressList = doc.userAddressList[0];
    doc.userAddressList = userAddressList;
    db.collection.save(doc);
})

或使用运行以下管道的聚合框架
db.collection.aggregate([
    { "$addFields": {
        "userAddressList": {
            "$arrayElemAt": ["$userAddressList", 0]
        }
    } },
    { "$out": "collection" }
])

请注意,这不会更新您的集合,而是会替换现有的集合,并且不会更改上一个集合中存在的任何索引。如果聚合失败, $out 操作将不对先前存在的集合进行任何更改。

07-24 18:12
查看更多