$ in需要一个数组作为第二个参数

时间:2019-02-04 00:02:45

标签: mongodb mongoose mongodb-query aggregation-framework

我正在尝试进行一些汇总,但遇到以下问题。我需要使用“管道”,当我要查找的数组丢失时,我得到了一个错误。

{
    $lookup: {
        from: 'comments',
        let: { comments: '$comments' },
        pipeline: [
            {
                $match: {
                    $expr: {
                        $in: ['$_id', '$$comments']
                    },
                    isDeleted: false
                }
            }
        ],
        as: 'comments'
    }
}

在此阶段,我得到以下错误:

'$in requires an array as a second argument, found: missing'

因为并非所有文档都具有“评论”字段。

注意:我使用的是管道而不是 foreingField localField ,因为我需要过滤isDeleted: false或其他过滤器匹配条件。

仅当文档具有评论字段时,才可以进行此查找吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以添加$ifNull$and,其中不能为null或在$expr中存在条件

{
    $lookup: {
        from: 'comments',
        let: { comments: '$comments' },
        pipeline: [
            {
                $match: {
                    $expr: {$and: [
                        {$in: ['$_id', {$ifNull :['$$comments',[]]}]},
                        {$eq: ["$isDeleted", false]}
                    ]}
                }
            }
        ],
        as: 'comments'
    }
}