【问题标题】:Differences between $project, $filter and $match in MongoDBMongoDB中$project、$filter和$match的区别
【发布时间】:2018-11-09 08:29:53
【问题描述】:

我是 MongoDB 和一般 NoSQL 服务器的新手。我正在使用 Studio 3T 软件(MongoDB 的 IDE)在我的计算机上测试一些东西(插入本地数据库、简单查询等),并在测试聚合方法时进入这 3 个运算符:$project、$filter 和 $匹配。问题是我不明白这些运算符之间的区别,我认为我唯一可能理解的是 $project 用于“选择”在屏幕上显示哪些字段(或整个数组)以响应查询,但是$match 和 $filter 呢?他们似乎做同样的事情。我阅读了 MongoDB 文档,但它没有对运算符进行足够详细的解释(当然在我看来)。

提前致谢

【问题讨论】:

    标签: mongodb nosql operators aggregation-framework


    【解决方案1】:

    $project$matchAggregation Pipeline Stages$filterAggregation Pipeline Operator

    Pipeline stage 和 Pipeline operator 的区别在于 stage 可以单独使用,而 Pipeline operator 只能在 Pipeline stage 内部使用。

    $project 用于将元素投影到下一阶段

    $match 用于过滤集合以仅提供输入查询/条件的匹配文档,建议在使用其他运算符之前在聚合管道的开头使用它。因为它将集合过滤为数量减少的文档,并且只有减少的文档集被传递到聚合管道的下一阶段。

    $filter 用于数组中,它根据指定的条件选择要返回的数组的子集。返回一个仅包含符合条件的元素的数组。返回的元素按照原来的顺序排列。

    【讨论】:

    • 好的,我想我明白了!当我对文档执行聚合方法时,我使用 $match 来“选择”哪些文档进入 $project 阶段,在那里我选择要显示的字段,并且 $filter 用于数组中以根据某些标准获取数组的子集!我没有理解 Stages 和 Operator 之间的这种区别,谢谢老兄!
    • 很高兴答案有所帮助。您可以将问题标记为已回答,以便对其他人也有帮助。
    猜你喜欢
    • 2013-03-10
    • 2015-12-03
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2020-09-15
    相关资源
    最近更新 更多