我的模型中有ListField
,其中包含string
个值。如何查询包含给定string
的{{1}}个匹配项?我知道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')
注意:bc
运算符在icontains
时按预期工作,但对于StringField
,它只会匹配ListField
。 the regex demo
除此之外,mongo查询中还有一个带文本匹配的选项,MongoDB查询支持正则表达式的Perl表示法。像User.objects(tags='bc')
一样。我们如何用mongoengine做到这一点。 Refer
答案 0 :(得分:1)
最后我用正则表达式匹配完成了这个。
我用
更改了我的查询 users = Users.objects(tags__icontains='bc')
而不是
import re
users = Users.objects(tags=re.compile('.*bc.*', re.IGNORECASE))