FieldValue.arrayRemove () не работает с массивом строк - PullRequest
0 голосов
/ 02 апреля 2020

Я храню токены регистрации облачных сообщений Firebase для пользователей в коллекции пользователей firestore, и всякий раз, когда я отправляю уведомление, я удаляю токены, которые не используются. Я делаю это на облачной функции с администратором SDK. Код, который я использую, это-

let removeRegistrationTokens = async function (userId: string, tokens: string[]) {
   await db.collection('users')
        .doc(userId)
        .update("tokens",admin.firestore.FieldValue.arrayRemove(tokens)
        .catch(logError)
}

Но это не работает и никакое значение не удаляется из массива. Я проверил массив токенов и передал правильное значение. Если я просто изменю код на

.update("tokens",admin.firestore.FieldValue.arrayRemove(tokens[0])

, это удалит первый элемент в массиве из массива токенов в firestore. Согласно документации, он должен удалить все элементы, переданные ему в массиве.

Если ваш документ содержит поле массива, вы можете использовать arrayUnion () и arrayRemove () для добавления и удаления элементов. arrayUnion () добавляет элементы в массив, но только элементы, которых еще нет. arrayRemove () удаляет все экземпляры каждого данного элемента.

Любая справка о том, почему это могло произойти?

1 Ответ

1 голос
/ 02 апреля 2020

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

arrayRemove(...tokens)

См. Также документацию по API для arrayRemove .

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