所以我目前正在开发mongodb和nodejs的项目,我想知道,你怎么能通过nodejs更新mongodb中的数据?我的问题是我想保留旧数据并添加新数据。例如,这是我目前在mongodb中的数据
{
"_id" : ObjectId("5a1c0c1c3b147ec2e31cceb3"),
"event_id" : "1",
"event_medium" : "null",
"event_tags" : ["#JustTesting"]
}
所以我想将新数据添加到event_tags
数组中,并保留旧数据。
因此,例如最终结果将是:
{
"_id" : ObjectId("5a1c0c1c3b147ec2e31cceb3"),
"event_id" : "1",
"event_medium" : "null",
"event_tags" : ["#JustTesting", "#Test", "#Something"]
}
答案 0 :(得分:0)
您的出发点是Mongodb中CRUD(创建,读取,更新,删除)操作中的更新功能。
您的节点程序应该包含更新功能,您可以在其中设置要更新的_id字段,并在“数据”中加载要更新的内容字段,例如如下所示:
myModel.prototype.update = function (_id, data, callback) {
const query = { _id: this.mongo.ObjectId(_id) };
debug(' update:' + JSON.stringify(query));
this.mongo.collection('mycollection').update(query, data, callback);
};
如果你使用MVC模式,这段代码应放在你的模型中。
还有很多事要做。 老实说,我推荐一个更深入的教程,如本节的第3和第4部分,用于nodejs和Mongoose(mongo db驱动程序): MDN tutorial for mongo/node/express
答案 1 :(得分:0)
我假设你正在使用猫鼬..
eventModel.findOne({event_id:1 },
function(err, eventObj){
if(err){
//handle error
} else {
if(eventObj === null) {
//event doesnot exist
}
var tagList = eventObj.event_tags;
tagList.push('new_tag1');
tagList.push('new_tag2');
eventObj.event_tags = tagList;
eventObj.save(function(err){
if(err){
//handle error
} else {
//success
}
})
答案 2 :(得分:0)
您应该使用MongoDB的更新功能。 MongoDB知道不同的update operators,在您的情况下,您可以使用$push
或$pushAll
(第二个已被弃用):
使用$push
YourCollection.update({ _id: 'xxx' }, { $push: { event_tags: '#Test' } });
YourCollection.update({ _id: 'xxx' }, { $push: { event_tags: '#Something' } });
或同时使用$pushAll
(现已弃用)
YourCollection.update({ _id: 'xxx' }, { $pushAll: { event_tags: ['#Test', '#Something'] } });
要与您的NodeJS应用程序进行MongoDB交互,我会使用像this one这样的库。