Я использую 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).