为什么$与$ eq相匹配的速度非常慢,但是$ neq非常快?

时间:2017-08-07 11:10:36

标签: mongodb mongodb-query aggregation-framework

查看查询:

db.pmusers.aggregate(
    {
        $unwind: '$preferableUsersIds'
    },
    {
        $project: {
            cmp_value: {$cmp:['$id', '$preferableUsersIds']},
            id:1
        }
    },
    {
        $match: {
            cmp_value: {$ne: 0}
        }
    }
)

这非常快。

但如果替换

$match: {
                cmp_value: {$ne: 0}
        }

   $match: {
                cmp_value: {$eq: 0}
           }

你能解释一下这种行为吗?

P.S。

根据Neil Lunn的建议,我写了以下内容:

db.pmusers.aggregate(
    {
        $unwind: '$preferableUsersIds'
    },
    {
        $redact:{
            $cond:[
                    {
                        $eq : [
                            {$cmp:['$id', '$preferableUsersIds']},
                            0
                        ]
                    },
                    '$$DESCEND',
                    '$$PRUNE'
            ]
        }
    },
    {
        $project:{
            id:1
        }
    }
)

它大约快两倍。

0 个答案:

没有答案