首页 > 解决方案 > MongoDB:将数组中的每个项目更改为对象

问题描述

我正在学习 MongoDB 并尝试更新存储在我的集合中每个文档中的数组中的每个项目。所以我的文件有以下格式:

{_id:...,
 name:'...', 
 image: '...',
 devices: ['item1', 'item2', 'item3',...]
}

我想要做的是获取设备数组中的每个项目并将它们变成这样的对象:

devices:[{item1:'imagepath'},{item2:'imagepath'},{item3:'imagepath'}]

我尝试在 MongoDB shell 中运行以下代码,但没有任何反应。我没有收到错误或任何东西。当我检查集合时,设备数组尚未更新。

db.airforce.find().forEach(function (obj1) {
    obj1.devices.forEach(function(device){
            db.airforce.update({},{
                $set:{
                    "devices.[device]":{device:'images/devices/' + device + '.png'}
                }
            })
        }
    )
});

谢谢您的帮助!

标签: mongodbmongodb-querynosql

解决方案


你可以试试,

  • 创建一个名为的变量devices并明智地推送您的图像路径
  • 分配devicesobj1.devices
  • save()保存整个文档
db.airforce.find().forEach(function (obj1) {
    let devices = [];
    obj1.devices.forEach(function (device){
        devices.push({[device]: 'images/devices/' + device + '.png'});           
    })
    obj1.devices = devices;
    db.airforce.save(obj1);
});

推荐阅读