我正在实现单页面应用程序并使用Angular JS,MongoDB数据库。所以我用两种方式调用聚合:
当我使用3.4版本的mongoDb时。然后双方都在工作。但我将mongoDb版本从3.4升级到3.6然后没有参数它不起作用。 只有参数聚合才能调用。
当我实现不带参数的聚合时 然后它给我下面的错误信息。
完整的响应是{'ok':0.0,'errmsg':''''''选项是 必需的,除了带有解释参数的聚合','代码':9, 'codeName':'FailedToParse'
我检查了stackoverflow中的一些链接;
Spring data mongodb - The 'cursor' option is required
The 'cursor' option is required error coming from every aggregate
GIT网址
https://github.com/metabase/metabase/issues/6599
https://github.com/Automattic/mongoose/issues/4101
但我没有得到解决方案。更新版本有缺陷吗?或者我们必须更改一些代码?在此先感谢
答案 0 :(得分:0)
我遇到了这个问题,因为我使用的是梯形cms,因此被迫使用它们有些过时的依赖关系,在这种情况下,该依赖关系包括旧版本的猫鼬。
我能够避免出现此错误,并使用以下语法获得了汇总功能(只需用猫鼬模型替换keystone.list代码):
keystone.list('Blurt').model.aggregate([
{
$lookup:{
from: "users",
localField: "author.id",
foreignField: "_id",
as: "userImg"
}
}
,
{
$unwind: '$userImg'
},
{
$match: { 'author.id': {$ne: req.user._id}}
},
{
$sample: {'size': 3}
},
{
$project: {
_id: '$userImg._id',
name: '$userImg.name',
smImg: '$userImg.smImg',
text: 1,
vote: 1,
blurtDate: 1,
blurtImg: 1
}
}
]).sort({ blurtDate: -1 })
.cursor().exec()
.toArray(function(err, data) {
console.log(data);
res.json(data);
});
.toArray()由于某种原因是必需的。在.exec()方法中使用回调函数将返回一个空数组,无论从何处也无法找出原因。使用mongodb 4.0.4和mongoose 4.7.8