【问题标题】:How to update value of a key in a list of a json in Mongo如何更新 Mongo 中 json 列表中键的值
【发布时间】:2014-05-23 05:13:57
【问题描述】:

我有一个文件---

   Employees:[
       {
          name:"abc",
          contact:"123",
          email:"xyz@gmail.com"
       },
       {
          name:"efg",
          contact:"456",
          email:"efg@gmail.com"
       },
       {
          name:"hij",
          contact:"789",
          email:"hij@gmail.com"
       }
  ]

我需要用 value="abc" 更新列表中所有键名的名称。

我已经尝试更新了

db.collection.update(
    { "_id" : ObjectId("5308595e3256e758757b4d2f") }, 
    { "$set": { "Employees.name " : "abc" } } 
);

但是得到错误:不能使用部分(Employees of Employees.name)来遍历元素。

【问题讨论】:

    标签: mongodb mongodb-query mongo-java


    【解决方案1】:

    这些都在一个数组中,所以这就是你当前的语句不起作用的原因。您有几个选项可以做到这一点,因为没有简单的语句可以做到这一点。

    1.你知道数组中有多少元素,所以用“点符号”明确地设置它们

        db.collection.update(
            { "_id" : ObjectId("5308595e3256e758757b4d2f") }, 
            { 
                "$set": { 
                    "Employees.0.name " : "abc",
                    "Employees.1.name " : "abc",
                    "Employees.2.name " : "abc"
                }
            } 
        );
    

    2.您不知道但准备发布此更新,直到返回的“修改”文档变为 0。然后您可以在更新中使用位置 $ 运算符,但这会一次只匹配一个元素:

         db.collection.update(
            { 
                "_id" : ObjectId("5308595e3256e758757b4d2f"),
                "Employees.name": { "$ne": "abc" }
            }, 
            { 
                "$set": { 
                    "Employees.$.name " : "abc"
                }
            } 
        );
    

    3. 检索文档并更新代码中的所有数组成员:

        var doc = db.collection.findOne({ 
            "_id": ObjectId("5308595e3256e758757b4d2f") 
        });
    
        doc.Employee.forEach(function(emp) {
            emp.name = "abc";
        });
        db.collection.update(
           { "_id": doc._id },
           { "$set": { "Employee": doc.Employeee } }
        )
    

    这些是执行此操作的基本方法,以及一些实际示例,说明为什么目前不能在单个语句中仅更新每个数组成员字段来完成此操作。

    【讨论】:

      猜你喜欢
      • 2019-12-11
      • 1970-01-01
      • 2021-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多