Mongoengine 查询列表字段包含字符串匹配项

Mongoengine query listfield contains string matches

我在模型中有一个 ListField 包含 string 值。如何查询包含给定 stringstring 匹配项?我知道 contains 操作员需要。但它与给定的字符串完全匹配。

例如:

[
    {_id: 1, "name": "name1", "tags": ["abc", "efg", "ijk"]},
    {_id: 2, "name": "name2", "tags": ["bcd", "fgh", "jkl"]}
]

型号:

class Users(Document):
    name = StringField()
    tags = ListField(StringField())

那么我的查询就像

users = Users.objects(tags__icontains='bc')

如我所料 returns 两条记录都包含 bc

注意:对于 icontains 运算符在 StringField 时按预期工作,但对于 ListField 它只匹配 User.objects(tags='bc'). Refer

除此之外,mongo 查询中还有一个文本匹配选项,MongoDB 查询支持正则表达式的 Perl 表示法。喜欢tags=/bc/。我们如何使用 mongoengine 来做到这一点。 Refer

最后我用正则表达式匹配完成了这个。

我已将查询更改为

users = Users.objects(tags__icontains='bc')

而不是

import re

users = Users.objects(tags=re.compile('.*bc.*', re.IGNORECASE))