MongoDB:将数组中的每个项更改为对象

MongoDB:将数组中的每个项更改为对象,mongodb,mongodb-query,nosql,Mongodb,Mongodb Query,Nosql,我正在学习MongoDB,并尝试更新我收藏的每个文档中存储的数组中的每个项目。因此,我的文档采用以下格式: {_id:..., name:'...', image: '...', devices: ['item1', 'item2', 'item3',...] } 我要做的是将devices数组中的每个项转换为如下对象: devices:[{item1:'imagepath'},{item2:'imagepath'},{item3:'imagepath'}] 我尝试在MongoDB

我正在学习MongoDB,并尝试更新我收藏的每个文档中存储的数组中的每个项目。因此,我的文档采用以下格式:

{_id:...,
 name:'...', 
 image: '...',
 devices: ['item1', 'item2', 'item3',...]
}
我要做的是将devices数组中的每个项转换为如下对象:

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'}
                }
            })
        }
    )
});

谢谢你的帮助

您可以使用
$map
修改数组

db.collection.aggregate([
  {
    $addFields: {
      devices: {
        $map: {
          input: "$devices",
          in: {
            item: "$$this"
          }
        }
      }
    }
  }
])

工作

您可以使用
$map
修改数组

db.collection.aggregate([
  {
    $addFields: {
      devices: {
        $map: {
          input: "$devices",
          in: {
            item: "$$this"
          }
        }
      }
    }
  }
])
工作

你可以试试

  • 创建一个名为
    devices
    的变量,并按设备方向推送图像路径
  • 设备
    分配给
    obj1。设备
  • save()
    保存整个文档
你可以试试

  • 创建一个名为
    devices
    的变量,并按设备方向推送图像路径
  • 设备
    分配给
    obj1。设备
  • save()
    保存整个文档