更新Firestore文档的嵌套数据会覆盖它

我正在尝试在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>,fullApproval:<bool>}}}

注意:我使用来引用动态数据,例如文档ID或引用。

hustsky012 回答:更新Firestore文档的嵌套数据会覆盖它

当您使用字典(或地图,对象或其他语言中使用的任何键/值对结构)调用update时,给定顶级键后面的整个数据集将被替换。因此,如果您使用密钥idOffer.<offerId>调用update,则该密钥下的所有内容都将被替换,而idOffer级的每个 other 子密钥将保持不变

如果您不想替换密钥后面的整个对象,请更具体地说明您要更新哪些子代。在您的示例中,不更新单个idOffer.<offerId>键,而是为嵌套的子级指定三个键:

  • idOffer.<offerId>.isApproved
  • idOffer.<offerId>.dateApproved
  • idOffer.<offerId>.fullApproval

也就是说,您通过的字典在顶层应该有三个这样的键输入,而不是idOffer.<offerId>的单个键。

本文链接:https://www.f2er.com/3151114.html

大家都在问