MongoEngine:运算符“__contains”不适用于非英文字母或单词
MongoEngine: Operator "__contains" does not work with non-english letters or words
当尝试使用 mongoengine.queryset.visitor 中的 Q(nickname__contains="") 时,mongoengine 将无法匹配非英文字符。
例如:
{
"nickname":"你好啊"
}
=> User.objects(Q(nickname__contains="你好")).first()
=> None
但是对于英文字母,这会起作用:
{
"nickname":"Hello"
}
=> User.objects(Q(nickname__contains="Hel")).first()
=> (User Object)
我似乎没有遇到这个问题,至少对于最近版本的 mongoengine(使用 0.16.3 测试过)。
请注意,您还可以使用 .objects
中的 __raw__
参数来发出原始 pymongo 查询
见下文:
class TestUser(Document):
nickname = StringField()
TestUser(nickname="你好啊").save()
TestUser.objects(nickname__contains="你好").first() # prints <TestUser: TestUser object>
TestUser.objects(__raw__={"nickname" : {"$regex" : ".*你好.*"}}).first() # prints <TestUser: TestUser object>
当尝试使用 mongoengine.queryset.visitor 中的 Q(nickname__contains="") 时,mongoengine 将无法匹配非英文字符。
例如:
{
"nickname":"你好啊"
}
=> User.objects(Q(nickname__contains="你好")).first()
=> None
但是对于英文字母,这会起作用:
{
"nickname":"Hello"
}
=> User.objects(Q(nickname__contains="Hel")).first()
=> (User Object)
我似乎没有遇到这个问题,至少对于最近版本的 mongoengine(使用 0.16.3 测试过)。
请注意,您还可以使用 .objects
中的 __raw__
参数来发出原始 pymongo 查询
见下文:
class TestUser(Document):
nickname = StringField()
TestUser(nickname="你好啊").save()
TestUser.objects(nickname__contains="你好").first() # prints <TestUser: TestUser object>
TestUser.objects(__raw__={"nickname" : {"$regex" : ".*你好.*"}}).first() # prints <TestUser: TestUser object>