首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在mongo db中更新嵌套数组中的对象?

如何在mongo db中更新嵌套数组中的对象?
EN

Stack Overflow用户
提问于 2010-08-27 04:05:24
回答 1查看 6.3K关注 0票数 8

假设我有以下文档结构:

代码语言:javascript
复制
{
    "name": "myProduct",
    "perspectives" : [
        {
            "name": "p1",
            "views" : [
                {
                    "name": "v1"
                },
                {
                    "name": "v2"
                }
            ]
        },
        {
            "name": "p2",
            "views" : [
                {
                    "name": "v1"
                },
                {
                    "name": "v2"
                }
            ]
        }
    ]
}

如何更新文档结构,为每个视图添加一个"alias“字段?

基本上,我希望做一些类似perspectives.views.alias的事情:"av1“代表所有perspectives.views.name:"v1”。

结果结构将如下所示:

代码语言:javascript
复制
{
    "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" 
                } 
            ] 
        } 
    ]
}

为了澄清,我想这样做:

代码语言:javascript
复制
foreach (view in product.perspectives.views)
{
    if (view.name == "p1")
      view.add("alias", "av1");
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-08-27 19:05:25

您必须遍历您的文档、每个文档中的透视图以及每个透视图中的视图。然后更新视图并保存更新后的文档。下面这样的代码应该能起到作用:

代码语言:javascript
复制
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运行该文件:

代码语言:javascript
复制
mongo nameOfDatabase updateProducts.js

该函数将在服务器上执行,因此它应该相当快。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3579049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档