Node.js MongoDB更新超过ObjectID

8

我想更新我的文档,但是它没有完全成功。

// 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", "status:student" }

现在,如果我想按照以下方式更新文档中的行:

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个回答

13

您进行的update方式会检索集合中具有指定_id的文档,然后将该文档的内容替换为您指定的第二个参数。在您的情况下,它将检索具有_id53f9379ce9575bbe9ec29581的文档,并使用您传递的字段image:filename替换现有字段(这意味着现有字段将被删除,正如您所注意到的)。

您需要使用$set运算符。此运算符不会操作检索到的文档,而只会修改您指定的字段,如果不存在,则添加该字段。

因此,您的更新命令应该类似于:

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

值得一提的是,您需要使用例如以下方式定义“ObjectID”: import { ObjectID } from 'bson' - Peter

5

根据 _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);
         }
     });
 }

我需要引入ObjectID。 - TreeAndLeaf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接