node.js - MongooseError:查询已执行
问题描述
我将 Mongoose 更新到最新版本(6.0.1),现在每当执行时我都会收到此错误.findOne()
:
MongooseError: Query was already executed: Streams.findOne({ i: 6 })
at model.Query._wrappedThunk [as _findOne] (C:\Users\honza\ZiggerTestMaster\node_modules\mongoose\lib\helpers\query\wrapThunk.js:21:19)
at C:\Users\honza\ZiggerTestMaster\node_modules\kareem\index.js:370:33
at processTicksAndRejections (node:internal/process/task_queues:78:11)
at runNextTicks (node:internal/process/task_queues:65:3)
at listOnTimeout (node:internal/timers:526:9)
at processTimers (node:internal/timers:500:7) {
originalStack: 'Error\n' +
' at model.Query._wrappedThunk [as _findOne] (C:\\Users\\honza\\ZiggerTestMaster\\node_modules\\mongoose\\lib\\helpers\\query\\wrapThunk.js:25:28)\n' +
' at C:\\Users\\honza\\ZiggerTestMaster\\node_modules\\kareem\\index.js:370:33\n' +
' at processTicksAndRejections (node:internal/process/task_queues:78:11)\n' +
' at runNextTicks (node:internal/process/task_queues:65:3)\n' +
' at listOnTimeout (node:internal/timers:526:9)\n' +
' at processTimers (node:internal/timers:500:7)'
}
我的代码如下:
var visitorData = Visitor.find({});
app.get("/retrieve", function(req,res){
visitorData.exec(function (err,data) {
if (err) {
throw err;
}
res.render("retrieve", { title:"View Visitor Data", records: data});
});
});
它在我第一次打开路由时正确执行,但是每当我刷新它时,它都会引发上述错误。自 Mongoose 获得最新版本以来一直在发生。
解决方案
有同样的问题,但是关于 mongoose 的发行说明有所帮助,我将一个.clone()
方法链接到该.find()
方法:
https://mongoosejs.com/docs/migrating_to_6.html#duplicate-query-execution
Mongoose 不再允许执行相同的查询对象两次。如果你这样做了,你会得到一个 Query is already executed 错误。执行两次相同的查询实例通常表示混合了回调和承诺,但如果您需要执行两次相同的查询,您可以调用 Query#clone() 来克隆查询并重新执行它。
因此,您需要做的就是在.clone()
需要同时调用的 mongoose 方法的末尾添加一个方法,如下所示(我对您的代码进行了一些重组):
app.get("/retrieve", function (req, res) {
Visitor.find({}, function (err, data) {
if (!err) {
res.render("retrieve", { title: "View Visitor Data", records: data });
} else {
throw err;
}
}).clone().catch(function(err){ console.log(err)})
});
推荐阅读
- cocoapods - expoKit 更新到 33 后 Pod 未更新
- c# - 在 Word 中查找所有红色文本
- c++ - 从 dll 中调整向量大小时,为什么会出现堆损坏?
- php - 如何在PHP中字符串的特定位置插入破折号
- docker - 无法在 localhost:3000 访问 docker
- node.js - 从 GraphQL 中的 REST API 调用中获取 null
- c# - 如何分配通用 ObservableCollection
到已知 T 参数的 ObservableCollection? - reactjs - react native 中是否有类似于 android 的资源限定符?
- reactjs - 无法在 react-native 中发出网络请求
- ios - 如何将 xib 文件加载为自定义类?