FieldValue.arrayRemove() 不适用于字符串数组

Aks*_*ain 3 javascript firebase google-cloud-firestore

我将用户的 firebase 云消息传递注册令牌存储在 firestore 用户集合中,每当我发送通知时,我都会删除未使用的令牌。我正在使用 admin sdk 在云功能上执行此操作。我正在使用的代码是-

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

但这不起作用,并且没有从数组中删除任何值。我检查了标记数组,传递的值是正确的。如果我简单地将代码更改为

.update("tokens",admin.firestore.FieldValue.arrayRemove(tokens[0])
Run Code Online (Sandbox Code Playgroud)

这是从 firestore 中的 tokens 数组中删除数组中的第一个元素。根据文档,它应该删除数组中传递给它的所有元素。

如果您的文档包含数组字段,您可以使用 arrayUnion() 和 arrayRemove() 来添加和删除元素。arrayUnion() 将元素添加到数组中,但仅添加尚未存在的元素。arrayRemove() 删除每个给定元素的所有实例。

有什么帮助可以解释为什么会发生这种情况吗?

Dou*_*son 6

arrayUnion并且arrayRemove不接受数组参数。如果要传递多个值,则需要将它们指定为单独的参数。您可以尝试使用 JavaScript扩展运算符将该数组扩展为多个参数。

arrayRemove(...tokens)
Run Code Online (Sandbox Code Playgroud)

另请参阅arrayRemove的 API 文档。