Mongoengine Listfield是列表的子类

时间:2015-05-19 10:11:42

标签: python compare mongoengine sublist listfield

我有一份文件

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 }}}})
     

然而,这种双重负面让我感到恶心。有什么建议吗?

0 个答案:

没有答案