python慢​​检查是否找到了mongodb记录

时间:2013-11-08 02:01:54

标签: performance mongodb python-3.x

我有一个python(3.2)请求转到MongoDB,请求本身运行得足够快。然后,当我执行if语句检查以查看是否找到任何记录时,它需要50倍的时间:

    Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
    58         27623      6475988    234.4      1.7          itemInDB = db.mainData.find({"x":item[x]}).limit(1)
    59                                           
    60                                                       #existing item in db
    61         27623    293419802  10622.3     77.6          if itemInDB.count():

如果声明花了这么长时间,究竟是什么原因?!我认为必须有一个更好的方法来检查是否找到了记录,但谷歌已经空了。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

也许是更好的方式

如果您只对返回一个值感兴趣,则可能需要使用find_one而不是find。在找到一个值后,它将停止查找值,而不是必须在集合中运行的find

itemInDB = db.mainData.find_one({"x":item[x]})
if itemInDB:
  print("Item found")
else:
  print("Item not found")

为您的示例

根据the PyMongo docs,在查询游标计数时,您可以传入参数(TrueFalse)以考虑任何skip或{ {1}}先前对游标进行的调用。该参数的默认值为limit(即不考虑这些调用)。这可能会影响False查询的效果。

衡量查询效果

如果您想查看mongo如何执行查询,可以在光标上调用explain

count

解释功能也是implemented in PyMongo

答案 1 :(得分:0)

原来这是由于find()函数而不是if语句。我在“x”上创建了一个索引(无论如何我都应该这样)。将find更改为find_one并从if语句中删除.count()。整体提高75%。