查询与分组之间的差异

时间:2017-11-16 14:10:32

标签: mongodb aggregation-framework

我是 mongodb 的新手,我有2个查询: 弗里斯特:

db.movies.aggregate([
    { "$match": {
        $and : [
        { "imdb.rating": { $lt: 7 }},
        {$and: [ {"genres": { "$ne": "Crime" } }, {"genres": { "$ne": "Horror" } }]},
        {$and: [ {"languages": { "$eq": "English" } }, {"languages": { "$eq": "Japanese" } }]},
        {$or: [ {"rated": { "$eq": "PG" } }, {"rated": { "$eq": "G" } }]}

        ]

                }
    }
]).itcount()

结果:23

现在有了这个:

db.movies.aggregate([
    { "$match": {
         "imdb.rating": { $lt: 7 },
         $and: [ {"genres": { "$ne": "Crime" } }, {"genres": { "$ne": "Horror" } }],
         $or: [ {"rated": { "$eq": "PG" } }, {"rated": { "$eq": "G" } }],
         $and: [ {"languages": { "$eq": "English" } }, {"languages": { "$eq": "Japanese" } }]

                }
    }
]).itcount()

结果是25,

但是现在我无法理解两个查询之间有什么区别,可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

没有功能差异。当您提供多个表达式和一个简单的键时,$match隐式使用$and:值表达式是key: {$eq: value}的缩写,例如。

$match: {a:3, b:"buzz"}

是:

的简写
$match: {$and: [{a:{$eq:3}}, {b:{$eq:"buzz"}} ] }