【问题标题】:FieldValue.arrayRemove() is not working with string arrayFieldValue.arrayRemove() 不适用于字符串数组
【发布时间】:2020-07-14 21:15:38
【问题描述】:

我将用户的 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)
}

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

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

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

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

关于为什么会发生的任何帮助?

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    arrayUnionarrayRemove 不接受数组参数。如果要传递多个值,则需要将它们指定为单独的参数。您可以尝试使用 JavaScript spread operator 将该数组扩展为多个参数。

    arrayRemove(...tokens)
    

    另请参阅arrayRemove 的 API 文档。

    【讨论】:

      猜你喜欢
      • 2014-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      相关资源
      最近更新 更多