假设我有以下文档结构:
{ "name": "myProduct", "perspectives" : [ { "name": "p1", "views" : [ { "name": "v1" }, { "name": "v2" } ] }, { "name": "p2", "views" : [ { "name": "v1" }, { "name": "v2" } ] } ] }
如何更新文档结构以向每个视图添加"别名"字段?
基本上我正在寻找像perspectives.views.alias:"av1"这样的所有perspectives.views.name:"v1".
结果结构如下所示:
{ "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"); }
Niels van de.. 14
您必须循环访问文档,每个文档中的透视图以及每个透视图中的视图.然后更新视图并保存更新的文档.像这样的东西应该做的伎俩:
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
该功能将在服务器上执行,因此应该非常快.
您必须循环访问文档,每个文档中的透视图以及每个透视图中的视图.然后更新视图并保存更新的文档.像这样的东西应该做的伎俩:
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
该功能将在服务器上执行,因此应该非常快.