有不同的方法可以过滤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)}