У меня очень странное поведение при сохранении документов после использования метода switch_collection
.
Можно воспроизвести с помощью следующего кода:
import mongoengine as me
class ObjectA(me.Document):
name = me.StringField()
def test_strange_behaviour():
a_0 = ObjectA(name="a_0")
a_0.save()
a_1 = ObjectA(name="a_1")
a_1.save()
a_1.switch_collection("new_collection", keep_created=False)
a_1.id = a_0.id
a_1.save()
print(a_1._collection)
print(a_1._collection.find_one(a_1.id))
При вызове функции test_strange_behaviour
код печатает что-то вроде этого:
Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True, read_preference=Primary(), connecttimeoutms=30000, heartbeatfrequencyms=3000, ssl=False), 'engine'), 'new_collection')
{'_id': ObjectId('5dc57611dba04ca06410e477')}
Как вы можетеПосмотрите, последняя печать показывает, что документ, созданный в коллекции new_collection
, содержит только поле _id
, а не поле name
. То же самое происходит, если keep_created
равно True
.
Почему это происходит? Что-то не так с этим примером?