node.js - 在 MongoDb ( Node.js ) 中返回插入的文档
问题描述
我需要向 MongoDB 插入一个文档并返回新插入的文档。我使用了 db.collection('collection__name').insertOne('要插入的数据').then((res)=>{ res.send(res.ops[0]) })
错误:操作未定义。
insertOne 只返回插入的文档的 _id,而不是整个文档☹,但之前它用于返回整个文档。我使用了 mongoclient 而不是 mongoose,在 mongoose 中它会返回整个文档,但我不喜欢使用 mongoose。
解决方案
他们从 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');
});
似乎唯一的解决方案是使用旧的库版本(没有打字稿)或使用返回的 id 字段调用 findOne。我只是遇到了同样的问题并添加了额外的 findOne 调用,因为我不想放弃打字稿。
推荐阅读
- javafx - JavaFX 长按按钮
- python - 我们可以在 Django 框架中嵌套 HTML 表单吗?
- python-3.x - Google 日历 API - 创建事件 400,解析错误
- vb.net - VB.net 将 2 条特定行导出到 DataGridView
- html - *ngFor 用于
- 使用 8.2.8 的角度版本绑定从 API 接收的数据,但无法显示数据
- floris - 您如何更改 FLORIS 内的湍流强度
- python - 将 JSON 文本格式化为可读
- go - 去 udp 连接拨号一次,然后发送很多
- java - 如何处理 Java 11 中缺少的 Swing plaf.windows 类?
- c# - ¿ 如何在 asp.net mvc 中声明十进制类型的 EditorFor?