python - 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
。
为什么会这样?这个例子有问题吗?
解决方案
归属a_0.id
后a_1.id
,你应该保存它force_insert=True
,否则你只是在更新a_1
。
推荐阅读
- c# - 如何检测连接客户端是否被修改(服务器:C#,客户端:AS3)
- c++ - range-v3 的 meta::defer 的实现是如何工作的?
- html - 悬停动画使网站水平滚动
- vue.js - 无法将 Bulma 的 Buefy 添加到 Vuejs 项目
- javascript - 触发了明显多余的“unhandledRejection”事件
- ios - Swift iOS -func 在操场上循环调用不会运行
- ruby - 当需要调用方法名称时,如何处理 String#[]?
- ruby-on-rails - 如何将关联模型中的属性合并到序列化器中的一个嵌套属性中?
- r - 基于正则表达式模式匹配将 PDF 索引为数据帧列表
- java - 我需要一些方法来快速将 BigInt 转换为 Bytes 数组,就像在 java 中一样