Mongoengine 查询列表字段包含字符串匹配项
Mongoengine query listfield contains string matches
我在模型中有一个 ListField
包含 string
值。如何查询包含给定 string
的 string
匹配项?我知道 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))
我在模型中有一个 ListField
包含 string
值。如何查询包含给定 string
的 string
匹配项?我知道 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))