这个基本的Mongoose模型代码在初始调用时返回空结果(gameMgr),但在后续调用中起作用。它不应该在初始upsert中返回填充的结果对象吗?mongo记录存在,并且在相同情况下第二次运行代码,因为没有插入,所以一切正常。
如果预期结果对象为空,那么创建新对象的合适模式是什么?(或者我是否会重新加载 另一个 数据库调用并进一步陷入回调疯狂状态?)
GameManagerModel.findByIdAndUpdate( game._id, {$setOnInsert: {user_requests:[]}}, {upsert: true}, function(err, gameMgr) { console.log( gameMgr ); // NULL on first pass, crashes node gameMgr.addUserRequest( newRequest ); } );
在Mongoose 4.0中,(和)new选项的默认值已更改为(请参阅发行说明)。这意味着您需要显式设置选项以获取由upsert创建的文档:findByIdAndUpdate``findOneAndUpdate``falsetrue
new
findByIdAndUpdate``findOneAndUpdate``false
true
GameManagerModel.findByIdAndUpdate( game._id, {$setOnInsert: {user_requests:[]}}, {upsert: true, new: true}, function(err, gameMgr) { console.log( gameMgr ); gameMgr.addUserRequest( newRequest ); } );