我最近在开发环境中更新了mongo,以利用新功能(Mongod 1.4-> 4.0)。现在,我所有现有的汇总查询都返回错误:
{[MongoError:除汇总以外,'cursor'选项是必需的 并带有解释参数]名称:'MongoError',确定:0,errmsg: 必须使用'\'cursor \'选项,但与 说明参数”,代码:9,代码名:“ FailedToParse”}
我知道我应该能够在管道定义中添加一个'cursor()'元素(我的期望返回数据很小),但是我似乎无法正确理解语法,或者在网上找到一个很好的示例,使用节点/猫鼬语法。我最好的猜测是添加光标,如下所示:
================================================ ======
ParticipantActivityLog.aggregate([
{ $match: {
"$and": [
{logDate :{$gte : new Date(postDataObj.strtDt),$lt : new Date(postDataObj.endDt)}},
{invitationId : {$in: postDataObj.invIds}}
]
}
},
{ "$sort": {logDate: 1 }},
{ $group: {
_id: {
"invitationId":'$invitationId',
"milestoneId":'$milestoneId',
"activityId": '$activityId'
},
invitationId : { $first : '$invitationId'},
milestoneId : { $first : '$milestoneId'},
activityId : { $first : '$activityId'},
activityName : { $first : '$activityName'},
logDate: {$first:'$logDate'},
frequency1 : {$first: '$frequency1'},
count: { $sum: 1 }
}} ],
{$cursor:{}}
).exec(function(err, result){
if(err){
console.log(err);
return;
}
return res.jsonp(result); });
================================================ ======
这将引发以下错误...
错误:参数必须是集合管道运算符
...所以我假设我以某种方式错误地添加了光标元素的语法?
答案 0 :(得分:0)
您可以将其从数组中删除,然后在外部调用(在exec之前) 这是更新的代码:
ParticipantActivityLog.aggregate([
{ $match: {
"$and": [
{logDate :{$gte : new Date(postDataObj.strtDt),$lt : new Date(postDataObj.endDt)}},
{invitationId : {$in: postDataObj.invIds}}
]
}
},
{ "$sort": {logDate: 1 }},
{ $group: {
_id: {
"invitationId":'$invitationId',
"milestoneId":'$milestoneId',
"activityId": '$activityId'
},
invitationId : { $first : '$invitationId'},
milestoneId : { $first : '$milestoneId'},
activityId : { $first : '$activityId'},
activityName : { $first : '$activityName'},
logDate: {$first:'$logDate'},
frequency1 : {$first: '$frequency1'},
count: { $sum: 1 }
}} ]
)
.cursor({})
.exec(function(err, result){
if(err){
console.log(err);
return;
}
return res.jsonp(result); });
您可以这样指定光标选项:
.cursor({ batchSize: 2500, async: true })