2016-09-29 60 views
1

假设我在数据库中有一个具有以下结构的文档;如何用node.js中的动态字段更新文档

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

所以你的问题似乎更多的是关于你如何查询,而不是你如何更新?插入文档与其他任何时间没有区别,除非您通过猫鼬或类似方式强制实施模式。 – Paul

+0

但我正在设置字段,如在示例中。现在,我该如何设置它们?事先不知道这些字段。我无法更新ID为1的文档。 – user6468132

回答

2

如果你说你有一个更新的对象:

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

那么我认为你有一些对象,它的数值为:

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

例如作为解析此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 
    } 
}); 

我不建议把数据存入数据库没有至少某种验证,但它可能做你问在上面显示的方式是什么。

欲了解更多信息,请参阅:

Introduction to MongoDB in Node.js