Фильтр моделей на основе словарного ключа - PullRequest
0 голосов
/ 06 мая 2019

Возникла проблема при фильтрации записи из базы данных. В моей базе данных есть записи, которые содержат поле dict.

например region - это словарь, который содержит другие словари, такие как

region = {'eastus': {'percentage_change': 0}, 'westus': {'percentage_change': 0}}

и я хочу получить eastus или westus.

Я пробовал что-то подобное, но я получаю пустой список.

MyModel.objects.filter(region__eq='eastus')

есть предложения по этой проблеме?

1 Ответ

0 голосов
/ 11 мая 2019

Я полагаю, что вы можете достичь этого с помощью оператора exists (http://docs.mongoengine.org/guide/querying.html#query-operators)

MyModel.objects.filter(region__eastus__exists=True)

. Что касается ИЛИ, вы должны использовать класс Q (http://docs.mongoengine.org/guide/querying.html#advanced-queries),, таким образом:

MyModel.objects.filter(Q(region__eastus__exists=True) | Q(region__westus__exists=True))

Если у вас есть непростые ключи (например, причудливый символ или просто тире), вы можете использовать оператор __raw__:

MyModel.objects.filter(__raw__={'region.a-fancy-key': {'$exists': True}})

...