我的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);
}
);
答案 0 :(得分:2)
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命令的使用。除非包含说明选项,否则必须指定游标选项。例如:
要指示具有默认批量大小的游标,请指定cursor:{}。
要指示具有非默认批量大小的游标,请使用cursor:{batchSize:}。
以下示例对文章集合执行聚合操作,以计算集合中显示的标记数组中每个不同元素的计数。有关详细信息,请参阅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: { }
} )
答案 1 :(得分:0)
如果你想在mongo 3.6中使用聚合函数
你可以试试这个
let resArchiveReq= await ArchiveReq.aggregate([
{ ... }
]).cursor({}).exec().toArray()
return res.json({ result: resArchiveReq })