首页 > 解决方案 > Mongoengine 文档在 `switch_collection` 后保存为无字段

问题描述

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如果is 也会发生同样的事情True

为什么会这样?这个例子有问题吗?

标签: pythonmongodbpymongomongoengine

解决方案


归属a_0.ida_1.id,你应该保存它force_insert=True,否则你只是在更新a_1


推荐阅读