Насколько я понимаю, вы модифицируете модель MongoEngine (добавляя поле со значением по умолчанию) после вставки документов.И у вас возникают проблемы при фильтрации вашей коллекции по этому новому полю.
По сути, у вас возникает следующая запутанная ситуация:
from mongoengine import *
conn = connect()
conn.test.test_person.insert({'age': 5}) # Simulate an old object
class TestPerson(Document):
name = StringField(default='John') # the new field
age = IntField()
person = TestPerson.objects().first()
assert person.name == "John"
assert Test.objects(name='John').count() == 0
Фактически, MongoEngine динамически применяет значение по умолчанию, когда полележащий в основе документ pymongo пуст, но он не учитывает это при фильтрации.
Единственный надежный способ гарантировать, что фильтрация будет работать, - это перенести существующие документы.Если добавляется только поле со значением по умолчанию, вы можете сделать это с помощью MongoEngine: TestPerson.objects().update(name='John')
Если вы сделали более важные / сложные изменения в структуре документа, то лучший вариант - перейти к pymongo..
coll = TestPerson._get_collection()
coll.update({}, {'$set': {'name': 'John'}})