我正面临着 mongodb 的这个问题。我的代码是这样的
for(loop) {
var cursorQuery = db.beacon_0000.aggregate([
{
$match: {
...
}
},
{
$project: {
...
}
},
{
$group: {
...
}
},
{
$sort: {
...
}
}
], {allowDiskUse: true} );
...
while(cursorQuery.hasNext()) {
var cursor = cursorQuery.next();
...
}
}
我通过命令和 mongo shell 运行上述查询
$ mongo dbName file.js
过了一会儿,我在 cursorQuery.hasNext() 行的服务器错误上发现光标不存在。
在查找查询中如果我收到此错误,我可以通过添加来解决addOption(DBQuery.Option.noTimeout)
但是此选项似乎不适用于聚合
请让我知道如何解决或解决此问题。
只是为了提供额外的更新:当说我使用
var cursor = db.collection..aggregate([ ...], {allowDiskUse: true} ).addOption(DBQuery.Option.noTimeout)
我收到此错误 E QUERY TypeError: Object # has no method 'addOption'
但是,当我说我使用
var cursor = db.collection..find({...}, {...}).addOption(DBQuery.Option.noTimeout)
它工作正常。
检查聚合文档 https://docs.mongodb.com/v3.0/reference/method/db.collection.aggregate/ 它说:返回:聚合管道操作最后阶段生成的文档的光标
然后检查光标文档 https://docs.mongodb.com/v3.0/reference/method/cursor.addOption/#cursor.addOption
没有建议聚合游标与查找游标不同,前者不支持 DBQuery.Option.noTimeout。
那么在 mongodb 中是否存在一个错误。任何修复它或有解决方法的方法。
注意mongodb版本是3.0