python-3.x - 更新 firestore 文档嵌套数据会覆盖它
问题描述
我正在尝试在 Firestore 文档中的嵌套字典中设置一些新字段,这会导致数据被覆盖。这是我写我需要的信息的第一部分的地方:
upd = {
"idOffer": {
<offerId> : {
"ref" : <ref>,
"value" : <value>
}
}
}
<documentRef>.update(upd)
所以这里的输出是这样的:
<documentid>:{idOffer:{<offerId>:{ref:<ref>, value:<value>}}}
然后我使用这段代码将一些字段添加到当前<offerId>
嵌套数据中:
approval = {
"isApproved" : <bool>,
"dateApproved" : <date>,
"fullApproval" : <bool>
}
<documentRef>.update({
"idOffer.<offerId>" : approval
})
我希望从中得到:
<documentid>:{idOffer:{<offerId>:{ref:<ref>, value:<value>, isApproved:<bool>,dateApproved:<date>,fullApproval:<bool>}}}
但我最终得到:
<documentid>:{idOffer:{<offerId>:{isApproved:<bool>,dateApproved:<date>,fullApproval:<bool>}}}
注意:我使用 <> 来引用动态数据,例如文档 ID 或引用。
解决方案
当您使用字典(或映射、对象或其他语言中使用的任何键/值对结构)调用更新时,给定顶级键后面的整个数据集将被替换。因此,如果您使用 键调用 update idOffer.<offerId>
,则该键下的所有内容都将被替换,而该级别的所有其他子键idOffer
将保持不变。
如果您不想替换键后面的整个对象,请更具体地说明您要更新哪些子对象。在您的示例中,不是更新单个idOffer.<offerId>
键,而是为嵌套子级指定三个键:
idOffer.<offerId>.isApproved
idOffer.<offerId>.dateApproved
idOffer.<offerId>.fullApproval
也就是说,您传递的字典在顶层应该有三个这样的键值条目,而不是idOffer.<offerId>
.
推荐阅读
- jasper-reports - ireport excel 输出包含空格而不是空列
- python - 如何使列表和字典的功能成为摘要?
- delphi - 为什么 MSFT_PhysicalDisk 总是返回磁盘大小 = 0?
- azure - Azure 持久函数实体绑定未注册 - node.js
- css - 使用 CSS 更改 Woocommerce“我的帐户”页面内容
- visual-studio-code - VS Code、Git 提交和 Electron 非上下文感知本机模块
- sql - 在缺少存储桶的 SQL Server 中计算直方图
- powershell - 在将数据写回之前关闭打开的 CSV。电源外壳
- javascript - 如何使用jquery根据滚动框内容使元素可滚动?
- bash - git 在合并期间是否创建新文件或覆盖现有文件