【问题标题】:Using Cursor() in Mongo Aggregates with Mongoose在 Mongo 聚合中使用 Cursor() 和 Mongoose
【发布时间】:2019-02-03 11:07:22
【问题描述】:

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


{ [MongoError: 'cursor' 选项是必需的,聚合除外 使用解释参数] name: 'MongoError', ok: 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);  });

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

这会引发以下错误...

错误:参数必须是聚合管道运算符

...所以我假设我添加的光标元素的语法以某种方式错误?

【问题讨论】:

标签: mongodb mongoose aggregation-framework


【解决方案1】:

您可以将其从数组中删除并在外部调用它(就在执行之前) 这是更新的代码:

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

【讨论】:

    猜你喜欢
    • 2017-10-12
    • 2017-10-07
    • 1970-01-01
    • 2018-10-15
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    相关资源
    最近更新 更多