Performance python检查是否找到mongodb记录的速度很慢

Performance python检查是否找到mongodb记录的速度很慢,performance,mongodb,python-3.x,Performance,Mongodb,Python 3.x,我有一个到MongoDB的python(3.2)请求,请求本身运行速度足够快。然后,当我执行if语句检查以查看是否找到任何记录时,所需时间是以下时间的50倍: Line # Hits Time Per Hit % Time Line Contents ============================================================== 58 27623 6475988 234

我有一个到MongoDB的python(3.2)请求,请求本身运行速度足够快。然后,当我执行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():
如果这个声明花了这么长时间,到底是什么原因?!我想一定有更好的方法来检查是否找到了一条记录,但谷歌却一无所获

谢谢你的帮助

也许是更好的方法 如果您只对返回一个值感兴趣,您可能希望使用
find\u one
而不是
find
。它将在找到一个值后停止查找值,而不是
find
,后者必须在集合中运行:

itemInDB = db.mainData.find_one({"x":item[x]})
if itemInDB:
  print("Item found")
else:
  print("Item not found")
以你为例 根据,在查询游标计数时,可以传入参数(
True
False
),以考虑以前对游标进行的任何
跳过
限制
调用。该参数的默认值为
False
(即不考虑这些调用)。这可能会影响
计数
查询的性能

衡量查询性能 如果您想查看mongo将如何执行查询,可以调用光标:

db.coll.find({"x":4}).explain()

explain函数也是如此。

结果表明它是由于find()函数而不是if语句造成的。我在“x”上创建了一个索引(无论如何我都应该这样做)。将find更改为find_one,并从if语句中删除.count()。总体速度提高了75%。

findOne显然比find()差。我之前实现的限制(1)实际上使其运行速度慢了3秒(代码在大约30k次迭代的循环中),限制也没有效果。