这个基本的Mongoose模型代码在初始调用时返回null结果(gameMgr),但适用于后续调用。它不应该在初始upsert上返回一个填充的结果对象吗? mongo记录存在,并且在相同的情况下第二次运行代码,一切正常,因为没有插入。
如果需要null结果对象,那么创建新对象的适当模式是什么? (或者我用另一个 db调用重新加载并进一步下降到回调疯狂?)
GameManagerModel.findByIdAndUpdate(
game._id,
{$setOnInsert: {user_requests:[]}},
{upsert: true},
function(err, gameMgr) {
console.log( gameMgr ); // NULL on first pass, crashes node
gameMgr.addUserRequest( newRequest );
}
);
答案 0 :(得分:7)
在Mongoose 4.0中,new
{和findByIdAndUpdate
的{{1}}选项的默认值已更改为findOneAndUpdate
(请参阅release notes)。这意味着您需要将选项显式设置为false
以获取由upsert创建的文档:
true