假设我在数据库中有一个具有以下结构的文档;
id: 1,
name: alex,
age: 21
客户端有一些更新,id:1
的同一文档返回为;
id: 1,
name: alex,
age: 21,
location: usa
添加了新字段location
。
我想更新数据库中的文档。我想添加这个新的插入字段,但我无法找到如何处理这种情况。由于location
不是静态的,因此可以是surname
,job
等等。所以新插入的字段是动态的,我事先并不知道。
如果字段location
是静态的,我可以将查询写为;
db.collection("user").updateOne( {id: 1},
{$set: {name: "alex", age: "21", location: "usa"}}, function(err, result){
if(err){}
else{}
});
但是现在,如何使用这些新添加的字段更新文档?
答案 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>}中的。