mongodb取代当前的obj(更新)

时间:2015-04-12 15:11:10

标签: node.js mongodb

我正在尝试使用更新查询更新集合中的obj,但是没有按字段定义...以获取obj(json)的原样,替换当前存在的内容。

这就是我试图做的事情,

function(userObj, callback) {
      usersCollection.update( { _id : ObjectId(context.user._id) }, userObj, function(err, updatedUser) {
        if(err)
          callback(err);

          console.log('user was updated - here is the new db obj', updatedUser);
          callback(err, updatedUser);
      });
    }

这是我收到的错误,

/Users/x/node_modules/monk/node_modules/mongodb/lib/mongodb/connection/base.js:246
        throw message;
              ^
Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
    at new ObjectID (/Users/x/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/lib/bson/objectid.js:38:11)
    at ObjectID (/Users/x/node_modules/mongodb/node_modules/mongodb-core/node_modules/bson/lib/bson/objectid.js:29:42)
    at Object.module.exports.db.users.update (/Users/x/db.js:54:39)
    at /Users/x/login.js:91:30
    at Promise.<anonymous> (/Users/x/db.js:42:9)
    at Promise.<anonymous> (/Users/x/node_modules/monk/node_modules/mpromise/lib/promise.js:178:8)
    at Promise.emit (events.js:117:20)
    at Promise.emit (/Users/x/node_modules/monk/node_modules/mpromise/lib/promise.js:84:38)
    at Promise.fulfill (/Users/x/node_modules/monk/node_modules/mpromise/lib/promise.js:97:20)
    at Promise.resolve (/Users/x/node_modules/monk/node_modules/mpromise/lib/promise.js:126:15)

记录context.user._id会返回真实用户的ID(来自mongo的gaven),即55293e1d2af8dc9ed83141b6

1 个答案:

答案 0 :(得分:0)

根据mongoose docs,您不必在更新通话中将_id字段转换为Objectid

所以下面的代码应该可以正常工作。

function(userObj, callback) {
  usersCollection.update( { _id : context.user._id }, userObj, function(err, updatedUser) {
    if(err)
      callback(err);

      console.log('user was updated - here is the new db obj', updatedUser);
      callback(err, updatedUser);
  });
}

我已经在我的一个项目中检查过typescript实现,其中我使用_id作为普通字符串,代码工作正常。查看github source code updateLog功能以获取更多详细信息。

如果我遗失了某些内容,请告诉我。

我希望这会有所帮助:)