json - 如何更新 mongodb 中嵌套数组中的对象?

标签 json mongodb

假设我有以下文档结构:

{
    "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/

相关文章:

json - 将包含引号的 JSON 插入到 PostgreSQL 中

node.js - 寻找 Mongoose 更新一的最佳方法

javascript - 过滤 $lookup 的结果

javascript - 如何使用 node.js 将图像存储在 mongodb 中?

MongoDB 在 CentOS 7 上作为服务启动失败

javascript - 搜索 JSON 数组中的项目

javascript - 重新加载 ng-repeat 数据失败,我做错了什么?

javascript - 使用jquery动态生成表单元素

json - 使用 JSON 序列化/反序列化 Dart 的新枚举的最佳方法是什么?

javascript - 预计是一个日期 angular.js