使用pymongo过滤器数据查找v.s

时间:2018-08-14 01:52:54

标签: mongodb find pymongo where

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

以下是我的示例案例:

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

    <div id="app" class="container">
    <block>
        <block>
            <div class="row">
                <header class="col-sm-12 header">
                    <h1 class="text-center text-uppercase header__title">formularz wprowadzania danych osobowych!</h1>
                </header>
            </div>
            <block>
                <form class="form-horizontal">
                    <div class="form-group">
                        <label class="control-label col-sm-2" for="firstName">Imie: </label>
                        <div class="inputs col-sm-10">
                            <input class="form-control" type="text" id="firstName" name="firstName" value="">
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="control-label col-sm-2" for="lastName">Nazwisko: </label>
                        <div class="col-sm-10">
                            <input class="form-control" type="text" id="lastName" name="lastName" value="">
                        </div>
                    </div>
                    <div class="form-group">
                        <div class="col-sm-offset-2 col-sm-10">
                            <input type="submit" value="dalej">
                        </div>
                    </div>
                </form>
            </block>
        </block>
    
  2. 使用查找方法和where表达式:(较慢)

    result = pymongo.db.mycollection.find({
       condition1,
       condition2
    })
    

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

1 个答案:

答案 0 :(得分:0)

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

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

db.setLogLevel(1)

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