一尘不染

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

node.js

这个基本的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 );
    }
);

阅读 222

收藏
2020-07-07

共1个答案

一尘不染

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

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