MongoEngine python library filter query get native mongo 语法

MongoEngine python library filter query get native mongo syntax

有不同的方法来过滤 mongo 引擎 python 库提供的 mongo 查询以连接到 MongoDB。我们可以使用不同的 Query operators.

但这是 MongoEngine 实现,MongoDB 无法理解,mongo引擎必须将其转换为 MongoDB 本机语法可以理解的语法。

例如:

model.objects(field__in=[1])

是 MongoDB 中的实际查询,因为

db.collection.find({field: {$in: [1]}})

models.objects(field__lt=5)

是 MongoDB 中的实际查询,因为

db.collection.find({field: {$lt: 5}})

我正在寻找一些可以通过 field__in=[1] 的方法,它会 return 我 {field: {$in: [1]}}.

我需要这个来生成聚合 $match. MongoEngine model.objects.aggregate will return pymongo.command_cursor.CommandCursor object and it not support filtering as supported by QuerySet 意思是,我不能像 model.objects.aggregate(XXXX)(field__in=[1]) 那样做。

我可以 model.objects(field__in=[1]).aggregate(XXX) 但这是错误的,我们在聚合之前进行过滤,但我想对聚合数据进行过滤。

mongoengine 中有一个方法可以提供这个。

from mongoengine.queryset.transform import query

如果不提供来源 Document 结果将非常一般。

>> query(title="hello")
{'title': 'hello'}

>> query(title__contains="hello")
{'title': 'hello'}

如果您定义 Document 并将其提供给查询,每个字段类型将知道如何正确处理查询:

>> from mongoengine import Document, fields

>> class Test(Document):
>>    title = fields.StringField()

>> query(Test, title="hello")
{'title': 'hello'}

>> query(Test, title__contains="hello")
{'title': re.compile(r'hello', re.UNICODE)}