Фильтр mongoengine запрос - PullRequest
1 голос
/ 08 июля 2019

У меня проблемы с фильтрацией по запросу, и я не знаю почему.Все остальные мои фильтры работают нормально.

Прежде всего, у меня есть коллекция mongoDB с данными, похожими на эти:

_id: generated
title: stringfield
date: Datefield
Responses: EmbeddedDocument 
    user: ReferenceField
    help: BooleanField

Текущие ответы, хранящиеся в БД (все с одним и тем же пользователем):

  • 2 раза с Responses.help = False
  • 2 раза с Responses.help = True

Теперь я хочу знать, сколько разПользователь ответил на вопросы:

@queryset_manager
def responses_user(doc_cls, queryset):
    return queryset.filter(responses__user=current_user.id).count

Приведенный выше запрос работает, он возвращает правильное количество ответов (4).Теперь я хочу добавить к нему фильтр, потому что я хочу знать, сколько раз пользователь ответил True.Таким образом, запрос становится:

@queryset_manager
def responses_user(doc_cls, queryset):
    return queryset.filter(responses__user=current_user.id, responses__help=True).count

Теперь я получаю результат, которого я не понимаю.Это возвращает мне 3. Это должно быть 2. Я не понимаю две вещи по этому поводу:

  1. Почему это возвращает 3?Это действительно странное число
  2. Почему мой запрос не работает?

К вашему сведению, способ звонка:

responses = Questions.responses_user()

Так что это можетне проблема, я думаю

1 Ответ

0 голосов
/ 09 июля 2019

Я могу использовать raw_queries , чтобы использовать с таким вложенным полем, как это:

queryset.filter(
  __raw__= {'responses.user': current_user.id, 'responses.help' = True}
).count
...