如何解决MongoDB 3.6中的''游标'选项?

时间:2018-05-07 08:44:52

标签: mongoose aggregation-framework

我正在实现单页面应用程序并使用Angular JS,MongoDB数据库。所以我用两种方式调用聚合:

  1. With Arguments。
  2. 没有争论。
  3. 当我使用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

    但我没有得到解决方案。更新版本有缺陷吗?或者我们必须更改一些代码?在此先感谢

1 个答案:

答案 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