いくつかの mongoengine のドキュメントに必要なパーマのリストがあり、それをフィルタリングしたいと考えています。
このドキュメントを検討してください:
class Entry(Document):
required_perms = ListField(StringField())
e = Entry(required_perms=['create', 'update'])
e.save()
以下にいくつかのユースケースを示します。
all_perms = ['create', 'update', 'delete']
Entry.objects.filter(required_perms__in=all_perms)
[<Entry: Entry object>] # Returned because 'create' OR 'update' are in required_perms
Entry.objects.filter(required_perms__in=['create', 'delete'])
[<Entry: Entry object>] # Returned because 'create' is in required_perms
Entry.objects.filter(required_perms__all=all_perms)
[] # Not returned because 'delete' is not in required_perms
でクエリを実行すると$in
、Entry
少なくとも 1 つの文字列がリストに含まれているため、 が返されます。$all
ドキュメントによると、私が意図していることの逆であるため、私のニーズをカバーしていません。「配列内のすべての項目は、提供された値のリストにあります」 .
そこで、次のようなお願いをしたいと思います。
Entry.objects.filter(everyoneof__required_perms__in=['create', 'delete'])
私はこれをだまして明確に説明しましたが、これは醜く、動的ではなく、使用しないでください。
Entry.objects(Q(required_perms__0__in=all_perms) & Q(required_perms__1__in=all_perms))
"""
Can be tested with: all_perms = ['create', 'delete'] -> No results
and: all_perms = ['create', 'update', 'delete'] -> 1 result
"""
そのようなことをする方法はありますか?多分生のクエリで?