我在一些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
,因为列表中至少有一个字符串$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
"""
有没有办法做到这一点?也许是一个原始的查询
如果您知道订单,则可以直接进行检查,例如:
如果顺序不固定或未知,则可以使用^{} 运算符:
更新
如果您必须确保列表中的所有元素都符合给定的要求,并且它们可能存在,也可能不存在,则不支持这种情况。您必须执行
__in=
操作,然后在应用程序中进行筛选我不确定该怎么办。为什么要担心用户有额外的权限?听起来不太灵活/经得起未来考验
相关问题 更多 >
编程相关推荐