При обновлении документа firestore вложенные данные перезаписывают его - PullRequest
1 голос
/ 06 ноября 2019

Я пытаюсь установить несколько новых полей во вложенном файле в документе 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>}}}

Примечание: я использую <> дляссылаются на динамические данные, такие как идентификаторы документов или ссылки.

1 Ответ

2 голосов
/ 06 ноября 2019

Когда вы вызываете update со словарем (или картой, или объектом, или любой другой структурой пары ключ / значение, используемой в других языках), весь набор данных за данными ключами верхнего уровня будет заменен. Таким образом, если вы вызываете update с ключом idOffer.<offerId>, то все под этим ключом будет заменено, в то время как каждый другой дочерний ключ уровня idOffer останется неизменным.

Если вы не хотите заменять весь объект за ключом, уточните, какие дочерние элементы вы хотите обновить. В вашем примере вместо обновления одного ключа idOffer.<offerId> укажите три ключа для вложенных потомков:

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

То есть передаваемый словарь должен иметь три ключевые записи, подобные этой, на верхнем уровне, а не один ключ idOffer.<offerId>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...