Я использую python's mongoengine для запроса 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
, либо creator
, но не оба. Это ожидается?
Я что-то пропускаю? Должен ли я сделать это напрямую с mongodb вместо mongoengine?
Мой текущий обходной путь - сделать два разных запроса и объединить результаты, но по мере увеличения количества элементов контента результат возвращается очень долго, потому что мне нужно получить все элементы, прежде чем я смогу их заказать, тем самым потерять всю пользу (django) постраничных результатов.