假设我有以下文档结构:
{
"name": "myProduct",
"perspectives" : [
{
"name": "p1",
"views" : [
{
"name": "v1"
},
{
"name": "v2"
}
]
},
{
"name": "p2",
"views" : [
{
"name": "v1"
},
{
"name": "v2"
}
]
}
]
}
我将如何更新文档结构以向每个 View 添加“别名”字段?
基本上,我希望对所有perspects.views.name: "v1"执行类似perspects.views.alias: "av1"的操作。
最终的结构如下所示:
{
"name": "myProduct",
"perspectives" : [
{
"name": "p1",
"views" : [
{
"name": "v1",
"alias": "av1"
},
{
"name": "v2",
"alias": "av2"
}
]
},
{
"name": "p2",
"views" : [
{
"name": "v1",
"alias": "av1"
},
{
"name": "v2",
"alias": "av2"
}
]
}
]
}
为了澄清,我想做这样的事情:
foreach (view in product.perspectives.views)
{
if (view.name == "p1")
view.add("alias", "av1");
}
最佳答案
您必须循环浏览文档、每个文档中的视角以及每个视角中的 View 。然后更新 View 并保存更新的文档。像这样的事情应该可以解决问题:
db.products.find().forEach(function (product) {
product.perspectives.forEach(function (perspective) {
perspective.views.forEach(function (view) {
view.alias = "a" + view.name;
})
});
db.products.save(product);
})
您可以将此函数粘贴到 Mongo shell 中并从那里运行它。作为替代方案,您可以将其保存在名为 updateProducts.js
的文件中,并使用 Mongo shell 运行该文件:
mongo nameOfDatabase updateProducts.js
该函数将在服务器上执行,因此速度应该相当快。
关于json - 如何更新 mongodb 中嵌套数组中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3579049/