当前位置: 首页 > 面试题库 >

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

萧无尘
2023-03-14
问题内容

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

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


 类似资料:
  • 我需要向MongoDB插入一个文档并返回新插入的文档。我用了db。集合(“集合名称”)。insertOne(“要插入的数据”)。然后((res)= 错误:未定义ops。 insertOne只返回插入文档的_id,而不是整个文档☹ 但早些时候,它通常返回整个文档。我使用了mongoclient而不是mongoose,在mongoose中它返回整个文档,但我不喜欢使用mongoose。

  • 我有以下Java代码: 但是,当我运行它时,它会抛出以下错误: 我在do之前初始化了变量。while 循环,并在 try. 中设置值。捕获循环。似乎尚未设置该变量。抱歉,如果这是一个相当基本的问题,但我似乎无法弄清楚。

  • 问题内容: 我试图做一些简单的命令来向文件中写入hello world: 这将返回一个空文件。 问题答案: Python每次之后都不会刷新文件。您要么需要使用以下命令手动刷新它: 或自己关闭它: 在实际程序中使用文件时,建议使用: 这样可以确保即使抛出异常也将关闭文件。但是,如果您想在REPL中工作,则可能要坚持手动关闭它,因为它会在尝试执行之前尝试读取全部内容。

  • 问题内容: 这是无效的代码: 这是一个愚蠢的示例,但是在静态类构造函数中,我们不能这样做。为什么?是否有充分的理由呢?有人对此有更多了解吗? 因此,我应该这样做的原因是在那里结束构建。 谢谢 问题答案: 我认为原因是初始化程序与字段初始化(以及实例初始化程序的构造函数)一起携带。换句话说,JVM仅识别一个位置来初始化静态字段,因此所有的初始化(无论是否以块为单位)都必须在此完成。 因此,例如,当您

  • 我开始使用Azure Java SDK 1.0。0最近,我注意到对于VM,方法总是返回null。SDK甚至无法获取有关所连接数据磁盘的信息。

  • 我想知道是否有一种方法可以插入新文档并一次返回。 这是我目前使用的: