Node.js mongodb更新ObjectID

时间:2014-08-24 01:20:47

标签: node.js mongodb

我想更新我的文档,但它不能100%工作。

// Initialize connection once
MongoClient.connect("mongodb://localhost:27017/testDB", function(err, database) { //"mongodb://localhost:27017/test"
  if(err) throw err;

 db = database;

});

我的收藏行如下:

  

{“_ id”:ObjectId(“53f9379ce9575bbe9ec29581”),“name:paco”,   “状态:学生”}

现在,如果我想更新Document上的行,如下所示:

db.collection('user', function(err,  collection){
                collection.update({'_id':ObjectID(req.session.loggedIn)}, {image : filename}, {w:1}, function(err, result){
                    console.log(result);

我只是:

  

{“_ id”:ObjectId(“53f9379ce9575bbe9ec29581”),“image:filename”}

如何进行更新以获取此类数据?:

  

{“_ id”:ObjectId(“53f9379ce9575bbe9ec29581”),“name:paco”,   “status:student”,“image:filename”}

2 个答案:

答案 0 :(得分:9)

按照您的方式执行update将使用指定的_id检索集合中的文档,然后它将使用您指定的内容替换此文档的内容第二个参数。在您的情况下,它将使用_id 53f9379ce9575bbe9ec29581检索文档,并使用您传递的字段image:filename替换现有字段(这意味着现有字段将被删除,因为您注意到了)。

您要做的是使用$set运算符。此运算符不会触及检索到的文档,只会修改您指定的字段,或者如果它不存在则添加它。

所以你的更新命令看起来像这样:

db.collection('user').update({'_id':ObjectID(req.session.loggedIn)}, {$set: {image : filename}}, {w:1}, function(err, result){
    console.log(result);

答案 1 :(得分:2)

按_id

更新记录
var ObjectID = require('mongodb').ObjectID; 
exports.updateUser = function(req, res) {

     var collection = db.collection('users');

     collection.update(where,  $set:req.body, function(err, result) {
         if (err) {
             console.log('Error updating user: ' + err);
             res.send({'error':'An error has occurred'});
         } else {
             console.log('' + result + ' document(s) updated');
             res.send(user);
         }
     });
 }