私は 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')
public
しかし、これらは XOR のように見えますcreator
。これは期待されていますか?
私は何かを見落としていますか?mongoengine の代わりに mongodb で直接これを行う必要がありますか?
私の現在の回避策は、2 つの異なるクエリを作成して結果を結合することです。 (django)ページ分割された結果の利点。