MongoDB с использованием предложения OR в mongoengine

Я использую mongoengine python для запроса MongoDB, и мне он по большей части понравился, но у меня проблема с расширенным запросом .

Вот моя модель

class ContentItem(Document):
    account = ReferenceField(Account)
    creator = ReferenceField(User)
    public = BooleanField(default=False) 
    last_used = DateTimeField(default=datetime.now)

. Я хотел бы сделать запрос для всех ContentItem , принадлежащих определенной учетной записи и либо созданных зарегистрированным пользователем, либо общедоступных. Вот запрос, который я написал

query = ContentItem.objects.filter( (Q(account=account) & Q(public=True)) |  (Q(account=account) & Q(creator=logged_in_user)) ).order_by('-last_used')

или:

query = ContentItem.objects.filter( Q(account=account) & ( Q(public=True) |  Q(creator=logged_in_user) ) ).order_by('-last_used')

Но это похоже на XOR, где либо public , либо создатель , но не оба одновременно. Это ожидается?

Я что-то упускаю? Должен ли я делать это напрямую с помощью mongodb, а не mongoengine?

Мой текущий обходной путь состоит в том, чтобы сделать два разных запроса и объединить результаты, но по мере того, как количество элементов содержимого становится больше, на получение результата требуется много времени, потому что мне нужно чтобы получить все элементы до того, как я смогу их заказать, тем самым потеряв все преимущества результатов с разбивкой на страницы (django).

18
задан MattoTodd 19 November 2011 в 03:47
поделиться