首页 文章

如何在Aggregate MongoDB中设置'cursor'选项

提问于
浏览
0

我的API服务器上有一个Aggregate命令 . 它运行良好,直到我将MongoDB更新为3.6.3 . 现在我遇到了这样的错误:“'cursor'选项是必需的,除了带有explain参数的聚合” . 这是我的例子:

ArchiveReq.aggregate({
                $project: {
                    projectId: 1,                       
                    projectName: 1,
                    shortDescription: 1,
                    numOfStudents: 1,
                    creationDate: 1,
                    matches: {$ne: ['$creationDate', '$updateDate']}
                }
            },
            function (err, Requests) {              
                if (err)
                    return res.send(err)

                res.json(Requests);
            }
        );

2 回答

  • 0
    ArchiveReq.aggregate([
                        $project: {
                        projectId: 1,                       
                        projectName: 1,
                        shortDescription: 1,
                        numOfStudents: 1,
                        creationDate: 1,
                        matches: {$ne: ['$creationDate', '$updateDate']}
                        }
                         ],
                         {
                           cursor: { batchSize: 0 }
                         }
                       ).exec(function(error, cursor) {
    
                       // use cursor 
    
                       });
    

    版本3.4中更改:除非命令包含explain选项,否则MongoDB 3.6将删除不带游标选项的aggregate命令的使用 . 除非包含explain选项,否则必须指定cursor选项 . 例如:

    要指示具有默认批处理大小的游标,请指定cursor:{} .

    要指示具有非默认批处理大小的游标,请使用cursor:{batchSize:} .

    以下示例对articles集合执行聚合操作,以计算集合中显示的tags数组中每个distinct元素的计数 . 有关详细信息,请参阅https://docs.mongodb.com/manual/reference/command/aggregate/

    db.runCommand( {
       aggregate: "articles",
       pipeline: [
          { $project: { tags: 1 } },
          { $unwind: "$tags" },
          { $group: { _id: "$tags", count: { $sum : 1 } } }
       ],
       cursor: { }
    } )
    
  • 2

    如果你想在mongo 3.6中使用聚合函数

    你可以试试这个

    let resArchiveReq= await ArchiveReq.aggregate([
                    { ... }
                ]).cursor({}).exec().toArray()
    
            return res.json({ result: resArchiveReq })
    

相关问题