MongoEngine python 库过滤器查询获取本机 mongo 语法



有不同的方法可以过滤mongoengine python库提供的mongo查询以连接到MongoDB。我们可以使用不同的查询运算符。

但这是MongoEngine的实现,MongoDB无法理解这一点,mongoengine必须将其转换为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]的方法,它会让我{field: {$in: [1]}}.

我需要这个来生成聚合$match。MongoEnginemodel.objects.aggregate将返回pymongo.command_cursor.CommandCursor对象,并且它不支持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)}

最新更新