我正在尝试使用更新查询更新集合中的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
答案 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
功能以获取更多详细信息。
如果我遗失了某些内容,请告诉我。
我希望这会有所帮助:)