Удалить вложенную ссылку в Firestore - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь удалить 2-уровневую вложенную ссылку в Firestore. Моя схема выглядит так:

enter image description here

В коде это выглядит так:

{
    "folder": "bla",
    "title": "myTitle",
    "children": [
        {
            "ref": "firstReference"
        },
        {
            "ref": "secondReference"
        },
        {
            "title": "Subcollection Title",
            "children": [
                {
                    "ref": "thirdReference"
                },
                {
                    "ref": "forthReference"
                }
            ]
        }
    ]
}

Теперь я ищу способ удалить третью или четвертую ссылку из второго дочернего массива.

Чтобы удалить элемент из первого дочернего массива, используйте этот код:

docRef.update({children: firebase.firestore.FieldValue.arrayRemove(folder.children[index])

Но это решение работает только для верхнего уровня ; (

Кто-нибудь знает, как удалить более глубокие вложенные элементы?

Я пытался:

docRef.update({[`children[${index}].children`]: firebase.firestore.FieldValue.arrayRemove(
                    folder.children[index].children[secondIndex])});

Но выдает ошибку (Пути не должны содержать '~', '*', '/', '[' или ']')

Спасибо за помощь;)

1 Ответ

2 голосов
/ 06 февраля 2020

Firestore не поддерживает изменение элементов массива по индексу. FieldValue.arrayRemove работает только в том случае, если вы передаете точное содержимое данных для удаления из поля массива. Если вы знаете только индекс, то вам нужно прочитать документ, изменить массив в памяти и записать обратно содержимое нового документа.

...