0

When trying to use Q(nickname__contains="") from mongoengine.queryset.visitor, mongoengine will not match the non-english character.

For instance:

{

"nickname":"你好啊"

}

=> User.objects(Q(nickname__contains="你好")).first()

=> None

But with English letters, this will work:

{

"nickname":"Hello"

}

=> User.objects(Q(nickname__contains="Hel")).first()

=> (User Object)

Community
  • 1
  • 1
Lincoln Yan
  • 337
  • 1
  • 10

1 Answers1

1

I don't seem to have the issue, at least with recent version of mongoengine (tested with 0.16.3).

Note that you can also use the __raw__ parameter in .objects to issue a raw pymongo query

See below:

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>
bagerard
  • 5,681
  • 3
  • 24
  • 48
  • Thanks a lot. I thought the issue was with Mongoengine, but it's actually not. I was using an old version of data. Thanks again. – Lincoln Yan Aug 08 '19 at 23:57