【问题标题】:single key value update inside array object数组对象内的单键值更新
【发布时间】:2016-11-10 22:39:03
【问题描述】:

我正在尝试更新单键值数组对象 在 MongoDB 集合中。但它使用单个键值更新所有值。

MongoDB 中以前的 Json 数据

result: [
    {        
      "firstname": A,
      "lastname": B,
      "age": 5     
    }
]
  "_id" : "582187d461cc8230bf0aba03"

我在做什么我正在更新单个键值 我只想更新单个键值 名字:A 到 D,我需要所有剩余的值必须相同(持久)。 但已更改,仅更新了单个键值对。

 {
   result: [
   {        
     "first name": A 
   }
   ]
  "_id" : "582187d461cc8230bf0aba03"
  }

姓氏和年龄都消失了。我正在使用 node js 来更新集合。

使用这个脚本

  var query = {"_id" : "582187d461cc8230bf0aba03"};
  var arr = [];
   userObj = {
   firstname : B
  };
   arr.push(userObj);
  update = {
  result : arr
   };

  var = options = {new : true, upsert : true};

   user.findOneAndUpdate(query, update, options, function(err, result)   { 
   if(err);
    console.log(err); 
    res.send(result);
   }

有任何命令,所以我只能更新单个键值,所有值都将保留在集合中

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    是的,所以默认情况下,当您进行更新时,它会将文档 A 替换为文档 B。

    您希望使用$set 运算符仅更新特定字段而不是替换整个文档。

    例如,如果您有:

    {
      _id: 123,
      first_name: "John",
      last_name: "Smith",
      phone_number: "(123)456-7890"
    }
    

    你会的

    db.user.update({_id: 123}, {first_name: "Bob"})
    

    您将替换整个文档并获得:

    {
      _id: 123,
      first_name: "Bob"
    }
    

    但如果你这样做:

    db.user.update({ _id: 123 }, { $set: { first_name: "Bob" } })
    

    您将获得以下预期结果:

    {
      _id: 123,
      first_name: "Bob",
      last_name: "Smith",
      phone_number: "(123)456-7890"
    }
    

    在你的情况下,你可以试试这个:

    var obj = {
      firstname: B
    };
    
    user.findOneAndUpdate(query, {$set: obj}, options, function(err, result)   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2022-12-01
      • 2018-06-30
      相关资源
      最近更新 更多