如何使用node.js中的动态字段更新文档

时间:2016-09-29 14:30:59

标签: node.js mongodb

假设我在数据库中有一个具有以下结构的文档;

id: 1,
name: alex,
age: 21

客户端有一些更新,id:1的同一文档返回为;

id: 1,
name: alex,
age: 21,
location: usa

添加了新字段location

我想更新数据库中的文档。我想添加这个新的插入字段,但我无法找到如何处理这种情况。由于location不是静态的,因此可以是surnamejob等等。所以新插入的字段是动态的,我事先并不知道。

如果字段location是静态的,我可以将查询写为;

db.collection("user").updateOne( {id: 1},
                     {$set: {name: "alex", age: "21", location: "usa"}}, function(err, result){
     if(err){} 
     else{}
});

但是现在,如何使用这些新添加的字段更新文档?

1 个答案:

答案 0 :(得分:3)

如果您说您有更新的对象:

id: 1,
name: alex,
age: 21,
location: usa

然后我假设您有一些值为:

的对象
{
  id: 1,
  name: 'alex',
  age: 21,
  location: 'usa'
}

e.g。解析从客户端发送的JSON的结果:

{
  "id": 1,
  "name": "alex",
  "age": 21,
  "location": "usa"
}

如果您在名为object的变量中拥有该对象,那么您所要做的就是:

db.collection("user")
  .updateOne({id: object.id}, {$set: object}, function (err, result) {
    if (err) {
      // handle success
    } else {
      // handle success
    }
});

但很可能您需要使用_id代替id

db.collection("user")
  .updateOne({_id: object._id}, {$set: object}, function (err, result) {
    if (err) {
      // handle success
    } else {
      // handle success
    }
});

如果您希望能够删除属性,甚至可以删除:

db.collection("user")
  .replaceOne({_id: object._id}, object, function (err, result) {
    if (err) {
      // handle success
    } else {
      // handle success
    }
});

我不建议在没有至少某种验证的情况下将数据放入数据库,但是可以按照上面显示的方式执行您所要求的操作。

有关详细信息,请参阅:

<{3>}中的