【问题标题】:Using pymongo filter data find v.s where使用 pymongo 过滤数据查找 v.s where
【发布时间】:2019-01-20 19:06:28
【问题描述】:

我想使用 pymongo 过滤数据。但我不知道这两种方法有什么不同。结果表明第一种方法的性能优于第二种方法。但是我已经在我的存储中过滤了一个查询集列表。这是 mongodb 功能吗?还是 pymongo 功能?

以下是我的示例案例:

  1. 使用查找方法:(更快)

    result = pymongo.db.mycollection.find({
       condition1,
       condition2
    })
    
  2. 使用 find 方法和 where 表达式:(较慢)

    query_data = pymongo.db.mycollection.find({
       condition1
    })
    
    result = query_data.where(Code("function() {
      return condition2}"))
    

在官方文档中,提到 if 可以使用标准运算符避免使用 $where 表达式。Doc.

【问题讨论】:

    标签: mongodb find pymongo where


    【解决方案1】:

    基本上你自己已经给出了答案。第一个版本应该是您的首选,因为使用$where 的第二个版本会导致执行时间变慢。原因之一是例如$where 不会使用任何索引 (link)。

    通过在服务器上启用日志记录,您可以在服务器日志中看到 PHP 驱动程序真正发送到 MongoDB 的查询,如下所示:

    db.setLogLevel(1)

    此外,一旦您知道精确的查询,您就可以使用.explain() 来比较不同的执行计划。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多