我有一个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():
如果声明花了这么长时间,究竟是什么原因?!我认为必须有一个更好的方法来检查是否找到了记录,但谷歌已经空了。
感谢您的帮助。
答案 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,在查询游标计数时,您可以传入参数(True
或False
)以考虑任何skip
或{ {1}}先前对游标进行的调用。该参数的默认值为limit
(即不考虑这些调用)。这可能会影响False
查询的效果。
如果您想查看mongo如何执行查询,可以在光标上调用explain
:
count
解释功能也是implemented in PyMongo。
答案 1 :(得分:0)
原来这是由于find()函数而不是if语句。我在“x”上创建了一个索引(无论如何我都应该这样)。将find更改为find_one并从if语句中删除.count()。整体提高75%。