我正在尝试在Firestore文档中的嵌套字典中设置一些新字段,这会导致数据被覆盖。 这是我编写所需信息的第一部分的地方:
upd = {
"idOffer": {
<offerId> : {
"ref" : <ref>,
"value" : <value>
}
}
}
<documentRef>.update(upd)
所以这里的输出是这样的:
<documentid>:{idOffer:{<offerId>:{ref:<ref>, value:<value>}}}
然后我使用以下代码向当前嵌套数据添加一些字段:
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或引用。
答案 0 :(得分:2)
当您使用字典(或地图,对象或其他语言中使用的任何键/值对结构)调用update时,给定顶级键后面的整个数据集将被替换。因此,如果您使用密钥idOffer.<offerId>
调用update,则该密钥下的所有内容都将被替换,而idOffer
级的每个 other 子密钥将保持不变
如果您不想替换密钥后面的整个对象,请更具体地说明您要更新哪些子代。在您的示例中,不更新单个idOffer.<offerId>
键,而是为嵌套的子级指定三个键:
idOffer.<offerId>.isApproved
idOffer.<offerId>.dateApproved
idOffer.<offerId>.fullApproval
也就是说,您通过的字典在顶层应该有三个这样的键输入,而不是idOffer.<offerId>
的单个键。