Как удалить элемент массива из вложенного документа в firebase? - PullRequest
0 голосов
/ 27 апреля 2019

Я работаю над приложением Vue, firebase и сохраняю userevents в коллекции firebase. Я обновляю этот массив userevents, когда пользователь планирует событие, и хочу удалить его, когда пользователь отменяет или удаляет его,

users(collection) -
 test123(document) -
      "id" . --fields
      "username" . --fields
      "userevents" . --array
         [0]
            "eventid"
            "date"
            "desc"
            "status"
         [1]
            "eventid"
            "date"
            "desc"
            "status"

В пользовательском интерфейсе, если пользователь отменяет событие, у меня будет Eventid и я хочу удалить его из массива userevents. Я попытался удалить элемент из массива, используя приведенный ниже код, но он удаляет все элементы из userevents,

userRef.update({
    eventid: firebase.firestore.FieldValue.delete()
});

Есть ли способ добиться этого в Firebase?

1 Ответ

0 голосов
/ 27 апреля 2019

Firestore в настоящее время не поддерживает удаление элементов из массива, используя только поле из элемента в этом массиве (в вашем случае, eventid). Есть несколько обходных путей:

Метод 1

Вы можете использовать FieldValue.arrayRemove , чтобы удалить элемент из массива по значению . Значение должно соответствовать всему элементу в массиве, и оно удалит все элементы в массиве, которые соответствуют этому значению. Вы можете прочитать больше об этом, и манипулировать массивами вообще здесь . Поскольку ваши элементы массива являются объектами, код будет выглядеть следующим образом:

userRef.update({
    "userevents": firebase.firestore.FieldValue.arrayRemove({"eventid": ..., "date": ..., "desc":..., "status":...})
});

Метод 2

В настоящее время вы храните объекты внутри массива. Что вы можете сделать, это сделать userevents карту (объект) вместо массива. Предполагая, что eventid уникален, вы можете проиндексировать карту по eventid, а затем просто удалить запись с карты следующим образом:

userRef.update({
    ['userevents.' + eventid]: firebase.firestore.FieldValue.delete()
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...