如何解决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"
}
}
}
}
}
])
,
您可以尝试
- 创建一个名为
devices
的变量,并明智地推动图像路径设备 - 将
devices
分配给obj1.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);
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。