使用Python3中的mongengine高效地检索数据(理想情况下是一批中的所有数据)
假设我有一个从Document类继承的类User(我使用的是Mongoengine)。现在,我想检索在某个时间戳之后注册的所有用户。以下是我正在使用的方法:使用Python3中的mongengine高效地检索数据(理想情况下是一批中的所有数据),python,mongodb,mongoengine,Python,Mongodb,Mongoengine,假设我有一个从Document类继承的类User(我使用的是Mongoengine)。现在,我想检索在某个时间戳之后注册的所有用户。以下是我正在使用的方法: def get_users(cls, start_timestamp): return cls.objects(ts__gte=start_timestamp) 3秒钟内返回1000个文档。这是非常缓慢的。我用SQL在几毫秒内完成了类似的查询。我是MongoDB新手,一般来说没有SQL,所以我想我做错了什么 我怀疑检索速度很慢,因
def get_users(cls, start_timestamp):
return cls.objects(ts__gte=start_timestamp)
3秒钟内返回1000个文档。这是非常缓慢的。我用SQL在几毫秒内完成了类似的查询。我是MongoDB新手,一般来说没有SQL,所以我想我做错了什么
我怀疑检索速度很慢,因为它是分几批完成的。我在某个地方读到PyMongo的批量是101,但我不知道Mongoengine是否也是如此
我可以更改批量大小,以便一次获取所有文档吗。我将知道大约总共将检索多少数据
欢迎提出任何其他建议
谢谢大家! 正如您所建议的,运行此查询不可能需要3秒钟。但是,问题不在于pymongo驱动程序的性能,需要考虑以下几点:
- 确保
字段包含在用户集合的ts
- Mongoengine执行一些积极的反引用操作,因此,如果1000个返回的用户文档有一个或多个
,则每个文档都会导致额外的查询李>ReferenceField
- Mongoengine为pymongo方法提供了一种查询mongodb的最有效方法
- mongodb是官方的PythonODM,其部分目的是提供比mongoengine更好的默认性能
- 确保
字段包含在用户集合的ts
- Mongoengine执行一些积极的反引用操作,因此,如果1000个返回的用户文档有一个或多个
,则每个文档都会导致额外的查询李>ReferenceField
- Mongoengine为pymongo方法提供了一种查询mongodb的最有效方法
- mongodb是官方的PythonODM,其部分目的是提供比mongoengine更好的默认性能