gpt4 book ai didi

node.js - mongo游标超时

转载 作者:太空宇宙 更新时间:2023-11-03 22:54:43 25 4
gpt4 key购买 nike

我正在尝试使用 Node 驱动程序聚合 mongo 数据库中的一些记录。我首先匹配 org、fed 和 sl 字段(这些字段已建立索引)。如果我只在与 org 字段匹配的数组中包含几家公司,则查询运行良好并按预期工作。但是,当将所有客户端包含在数组中时,我总是得到:

MongoError: getMore: cursor didn't exist on server, possible restart or timeout?

我尝试过使用allowDiskUse和batchSize设置,但似乎没有任何效果。对于数组中的所有客户端字符串,聚合运行约 5 小时,然后引发游标错误。有任何想法吗?下面是管道以及实际的聚合命令。

设置聚合管道:

var aggQuery = [

{
$match: { //all clients, from last three days, and scored
org:
{ $in : array } //this is the array I am talking about
,
frd: {
$gte: _.last(util.lastXDates(3))
},
sl : true
}
}

, {
$group: { //group by isp and make fields for calculation
_id: "$gog",
count: {
$sum: 1
},
countRisky: {
$sum: {
$cond: {
if :{
$gte: ["$scr", 65]
},
then: 1,
else :0
}
}
},
countTimeZoneRisky: {
$sum: {
$cond: {
if :{
$eq: ["$gmt", "$gtz"]
},
then: 0,
else :1
}
}
}
}
}

, {
$match: { //show records with count >= 500
count: {
$gte: 500
}
}
}
, {
$project: { //rename _id to isp, only show relevent fields
_id: 0,
ISP: "$_id",
percentRisky: {
$multiply: [{
$divide: ["$countRisky", "$count"]
},
100
]
},
percentTimeZoneDiscrancy: {
$multiply: [{
$divide: ["$countTimeZoneRisky", "$count"]
},
100
]
},
count: 1
}
}

, {
$sort: { //sort by percent risky and then by count
percentRisky: 1,
count: 1
}
}

];

运行聚合:

  var cursor = reportingCollections.hitColl.aggregate(aggQuery, {
allowDiskUse: true,
cursor: {
batchSize: 40000
}
});

console.log('Writing data to csv ' + currentFileNamePrefix + '!');

//iterate through cursor and write documents to CSV
cursor.each(function (err, document) {
//write each document to csv file
//maybe start a nuclear war
});

最佳答案

您正在调用 aggregate method默认情况下不返回光标(例如 find())。要将查询作为游标返回,您必须在选项中添加 cursor 选项。但是,(当前)不支持聚合游标的超时设置。 native Node.js 驱动程序仅支持 batchSize 设置。

您可以像这样设置batchOption:

var cursor = coll.aggregate(query, {cursor: {batchSize:100}}, writeResultsToCsv);

关于node.js - mongo游标超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24370320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com