如何更新mongo中的数据

时间:2017-11-28 11:41:36

标签: node.js mongodb

所以我目前正在开发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"]
}

3 个答案:

答案 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这样的库。