gpt4 book ai didi

mongodb - 在 Mongo 中使用 Cursor() 与 Mongoose 聚合

转载 作者:可可西里 更新时间:2023-11-01 09:53:49 26 4
gpt4 key购买 nike

我最近在我的开发环境中更新了 mongo 以利用新功能 (Mongod 1.4 --> 4.0)。现在我所有现有的聚合查询都返回错误:


{ [MongoError: The 'cursor' option is required, except for aggregate with the explain argument] name: 'MongoError', ok: 0, errmsg: 'The \'cursor\' option is required, except for aggregate with the explain argument', code: 9, codeName: 'FailedToParse' }


我知道我应该能够将“cursor()”元素添加到管道定义中(我预期的返回数据很小),但我似乎无法获得正确的语法,或者使用在线找到一个很好的例子节点/ Mongoose 语法。我最好的猜测是按如下方式添加光标:

============================================= ======

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); });

============================================= ======

这会引发以下错误...

Error: Arguments must be aggregate pipeline operators

...所以我假设我添加的游标元素的语法不知何故错误?

最佳答案

您可以将它从数组中移除并在外部调用它(就在 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 })

关于mongodb - 在 Mongo 中使用 Cursor() 与 Mongoose 聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52064242/

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