Node.js mongodb替换当前obj(更新)

Node.js mongodb替换当前obj(更新),node.js,mongodb,Node.js,Mongodb,我正在尝试使用更新查询更新集合中的obj,但不需要逐个字段定义。。。按原样获取obj(json),以替换当前存在的内容 这就是我想做的 function(userObj, callback) { usersCollection.update( { _id : ObjectId(context.user._id) }, userObj, function(err, updatedUser) { if(err) callback(err);

我正在尝试使用更新查询更新集合中的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)
/Users/x/node_modules/monk/node_modules/mongodb/lib/mongodb/connection/base.js:246
抛出消息;
^
错误:传入的参数必须是12字节的单个字符串或24个十六进制字符的字符串
在新ObjectID(/Users/x/node_modules/mongodb/node_modules/mongodb core/node_modules/bson/lib/bson/ObjectID.js:38:11)中
在ObjectID(/Users/x/node_modules/mongodb/node_modules/mongodb core/node_modules/bson/lib/bson/ObjectID.js:29:42)
在Object.module.exports.db.users.update(/users/x/db.js:54:39)
at/Users/x/login.js:91:30
答应。(/Users/x/db.js:42:9)
答应。(/Users/x/node_modules/monk/node_modules/mpromise/lib/promise.js:178:8)
在Promise.emit(events.js:117:20)
在Promise.emit(/Users/x/node_modules/monk/node_modules/mpromise/lib/Promise.js:84:38)
在Promise.fulfill(/Users/x/node_modules/monk/node_modules/mpromise/lib/Promise.js:97:20)
在Promise.resolve(/Users/x/node_modules/monk/node_modules/mpromise/lib/Promise.js:126:15)
记录
context.user.\u id
返回真实用户的id(来自mongo),即
55293e1d2af8dc9ed83141b6
根据,您不必在更新调用中将
\u 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用作普通字符串,代码运行良好。查看
updateLog
函数了解更多详细信息

如果我遗漏了什么,请告诉我


我希望这有帮助:)

传递的context.user.\u id是无效的ObjectId。尝试记录该值以检查传递的内容。55293e1d2af8dc9ed83141b6它是用户id(由mongo提供)尝试从userObj中删除_id,例如,
delete userObj._id
在更新之前也应该像
。更新({u id:…},{$set:userObj}..
除非有一些包装。是的,从
userObj
中删除
\u id
是个问题。如果我可以创建你的评论作为答案,我会..谢谢你