首页 > 解决方案 > 在 MongoDb ( Node.js ) 中返回插入的文档

问题描述

我需要向 MongoDB 插入一个文档并返回新插入的文档。我使用了 db.collection('collection__name').insertOne('要插入的数据').then((res)=>{ res.send(res.ops[0]) })

错误:操作未定义。

insertOne 只返回插入的文档的 _id,而不是整个文档☹,但之前它用于返回整个文档。我使用了 mongoclient 而不是 mongoose,在 mongoose 中它会返回整个文档,但我不喜欢使用 mongoose。

标签: node.jsmongodb

解决方案


他们从 mongo 4.0 开始删除了 ops 字段,您可以在此处找到架构: https ://mongodb.github.io/node-mongodb-native/4.0/interfaces/insertoneresult.html#insertedid

我只是查看了 mongoose 的源代码,他们实际上是根据 insertId 字段调用 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)。

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


推荐阅读