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