Node.js mongodb替换当前obj(更新)
我正在尝试使用更新查询更新集合中的obj,但不需要逐个字段定义。。。按原样获取obj(json),以替换当前存在的内容 这就是我想做的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);
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
是个问题。如果我可以创建你的评论作为答案,我会..谢谢你