当前位置: 首页 > 知识库问答 >
问题:

在MongoDb(Node.js)中返回插入文档

艾昊明
2023-03-14

我需要向MongoDB插入一个文档并返回新插入的文档。我用了db。集合(“集合名称”)。insertOne(“要插入的数据”)。然后((res)=

错误:未定义ops。

insertOne只返回插入文档的_id,而不是整个文档☹ 但早些时候,它通常返回整个文档。我使用了mongoclient而不是mongoose,在mongoose中它返回整个文档,但我不喜欢使用mongoose。

共有1个答案

丁子石
2023-03-14

自mongo 4.0以来,他们删除了ops字段,您可以在此处找到模式:https://mongodb.github.io/node-mongodb-native/4.0/interfaces/insertoneresult.html#insertedid

我刚刚查阅了mongoose的源代码,他们实际上是基于insertedId字段调用findOne的:

    const promise = collection.insertOne({ foo: 'bar' }, {})
      .then(result =>
        collection.findOne({ _id: result.insertedId })
      ).then(doc => {
        assert.strictEqual(doc.foo, 'bar');
      });

(https://github.com/Automattic/mongoose/blob/80245edf5aeab304411681035f7f4153dbd2b692/test/collection.test.js#L50).

似乎唯一的解决方案是使用旧库版本(不带typescript)或使用返回的id字段调用findOne。我只是遇到了同样的问题并添加了额外的findOne调用,因为我不想放弃typescript。

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

  • 问题内容: 我想获取更新的文档。这是我的原始代码,它成功更新但没有返回文档。 我使用了toArray函数,但是这给出了错误“没有提供的回调就不能使用writeConcern”: 有任何想法吗? 问题答案: 只会向自己的回调报告受影响的文档数。 要在修改时检索文档,可以改用(以前称为)。 更新:在mongoDB中执行时,请使用;如果使用mongoose,则可以使用。以上是Node.js驱动程序。 注

  • 主要内容:insert() 与 save() 方法,insertOne() 方法,insertMany() 方法前面我们已经介绍了如何在 MongoDB 中 创建数据库和 创建集合,接下来我们再来介绍一下如何在集合中插入文档。文档是 MongoDB 中数据的基本单位,由 BSON 格式(一种计算机数据交换格式,类似于 JSON)的键/值对组成。 insert() 与 save() 方法 您可以使用 MongoDB 中的 insert() 或 save() 方法向集合中插入文档,语法如下: db.

  • 问题内容: 我正在尝试将文档插入Node.js中的MongoDB中。我已经从数据库中成功读取了文件,并通过命令行界面添加了文档。但是,我无法从JavaScript插入文档。如果这样做,我会收到一个错误: 错误:没有提供的回调无法使用writeConcern 这是我的代码: 我无法终生弄清楚为什么会出现此错误。 我做错了什么,我应该怎么做呢? 问题答案: 您需要为调用提供回调函数,以便该方法可以将插

  • 问题内容: 这个基本的Mongoose模型代码在初始调用时返回空结果(gameMgr),但在后续调用中起作用。它不应该在初始upsert中返回填充的结果对象吗?mongo记录存在,并且在相同情况下第二次运行代码,因为没有插入,所以一切正常。 如果预期结果对象为空,那么创建新对象的合适模式是什么?(或者我是否会重新加载 另一个 数据库调用并进一步陷入回调疯狂状态?) 问题答案: 在Mongoose

  • 问题内容: 尽管我发现了与我类似的问题,但我无法独自解决问题。 在我的’../models/user’模型中,我想找到所有用户并将其放入数组,然后将该数组返回给控制器(在这里我将使用信息)。 这是我的代码: 我还注意到,“ console.log(test)”位于“ console.log(docs)”之前。我尝试将’docs’参数作为函数参数传递给’find’,但没有结果。 问题答案: 最好的方