我有一份文件
class A(Document):
name = StringField()
my_list = ListField(StringField())
我的班级数据是:
A1.my_list = [1, 2, 3, 4]
A2.my_list = [5, 6, 7, 8]
我的条件清单是:
condition = [1, 2, 3, 4, 5]
如何找到A1有字段" my_list"是我的"条件"
的子列表P / S:问题是如何构建Mongoengine查询来做到这一点,我无法找到所有记录并通过Python语法进行比较
是的,我发现MongoDB中的答案是
$in
而MongoEngine是__in
你可以使用:
A.objects(my_list__in=condition)
但是,如果您的数据列表是:
A1.my_list = [1, 2, 3]
A2.my_list = [1, 6, 7, 8]
和条件清单是:
condition_list = [1, 9, 10, 11]
你可以发现两者都合适。这意味着如果数据列表和条件列表中都有元素,则mongoengine将匹配。
更好的解决方案是MongoDB 3中的$ setIsSubset http://docs.mongodb.org/manual/reference/operator/aggregation/setIsSubset/
我不认为MongoEngine具有该功能,所以如果您遇到此问题,请使用MongoEngine中的原始查询来解决它。
另一种解决方案:
db.a.find({my_list: {"$not": {"$elemMatch": {"$nin" : condition }}}})
然而,这种双重负面让我感到恶心。有什么建议吗?