mongodb - 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'}
}
})
}
)
});
谢谢您的帮助!
解决方案
你可以试试,
- 创建一个名为的变量
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);
});
推荐阅读
- redux - Redux 表单根据 prop 值渲染字段
- javascript - Next.js React 应用程序中未定义窗口
- facebook-graph-api - 奇怪的随机 OAuth Facebook bot api 异常
- php - 如何在 Laravel 中将数组对象和数据添加到 JSON
- javascript - Twilio 快速入门立即断开通话
- c# - .NET Core HttpClient - 避免自动重定向?
- javascript - Safari/iPhone 的 ScrollIntoView 替代品
- c++ - 如果应用程序使用不同的用户凭据启动,则 CertFindCertificateInStore 无法找到证书
- reactjs - React Native 函数引用错误
- python - Gcloud 更新破坏了我的应用程序——GCP Python 2.7