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

Sti*_*ley 3 mongoose node.js

这个基本的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 );
    }
);
Run Code Online (Sandbox Code Playgroud)

Joh*_*yHK 7

在Mongoose 4.0中,(和)new选项的默认值已更改为(请参阅发行说明).这意味着您需要显式设置选项以获取由upsert创建的文档:findByIdAndUpdatefindOneAndUpdatefalsetrue

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