簡體   English   中英

MongoEngine python 庫過濾器查詢獲取本機 mongo 語法

[英]MongoEngine python library filter query get native mongo syntax

有不同的方法來過濾 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 MongoEngine model.objects.aggregate will return pymongo.command_cursor.CommandCursor object and it not support filtering as supported by QuerySet means, I cant do like 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)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM