Mongoose findByIdAndUpdate upsert在初始插入时返回空文档

这个基本的Mongoose模型代码在初始调用时返回一个空结果(gameMgr),但是在随后的调用中工作。 它不应该返回初始upsert上的填充结果对象吗? mongologging存在,并在相同的情况下第二次运行代码,一切正常,因为没有插入。

如果预期有一个空结果对象,那么创build一个新对象的适当模式是什么? (或者我重新加载另一个数据库调用,并进一步下降到callback疯狂?)

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中, findByIdAndUpdate (和findOneAndUpdatenew选项的默认值已经更改为false (请参阅发行说明 )。 这意味着您需要明确地将该选项设置为true以获取由upsert创build的文档:

 GameManagerModel.findByIdAndUpdate( game._id, {$setOnInsert: {user_requests:[]}}, {upsert: true, new: true}, function(err, gameMgr) { console.log( gameMgr ); gameMgr.addUserRequest( newRequest ); } );