在汇总查询mongodb中的两个单独集合中的字段上使用$ match

时间:2019-07-05 15:28:30

标签: mongodb mongoose mongodb-query aggregation-framework

我有一个汇总查询,其中加入了3个集合。我想根据其中两个集合的字段来过滤搜索。问题是,我只能在用猫鼬初始化的初始集合上使用$ match。

以下是查询:

var pipeline = [
    {
        $lookup: {
            from: 'blurts',
            localField: 'followee',
            foreignField: 'author.id',
            as: 'followerBlurts'
        }
    },
    {
        $unwind: '$followerBlurts'
    },
    {
        $lookup: {
            from: 'users',
            localField: 'followee',
            foreignField: '_id',
            as: 'usertbl'
        }
    },
    {
        $unwind: '$usertbl'
    },
    {
        $match: {
            'follower': { $eq: req.user._id },
            //'blurtDate': { $gte: qryDateFrom, $lte: qryDateTo }
        }
    },
    {
        $sample: { 'size': 42 }
    },
    {
        $project: {
            _id: '$followerBlurts._id',
            name: '$usertbl.name',
            smImg: '$usertbl.smImg',
            text: '$followerBlurts.text',
            vote: '$followerBlurts.vote',
            blurtDate: '$followerBlurts.blurtDate',
            blurtImg: '$followerBlurts.blurtImg'
        }
    }
];

keystone.list('Follow').model.aggregate(pipeline)
.sort({blurtDate: -1})
.cursor().exec()
.toArray(function(err, data) {
    if (!err) {
        res.json(data);
    } else {
        console.log('Error getting following blurts --> ' + err);
    }
});

在管道中,我只能在“关注”模型上使用$ match。当我在“模糊”模型上使用$ match时,它只是忽略了条件(您可以在$ match下的注释行中看到尝试将其包括在内的位置)。

令人困惑的是,我可以在.sort方法中使用此字段,但不能在$ match条件中使用。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用mongo 点符号来访问通过$lookup查找的集合中的元素。

https://docs.mongodb.com/manual/core/document/#dot-notation

因此,在这种情况下,followerBlurts.blurtDate应该为您提供所需的值。