java - 如何从 Firestore 中多个文档的数组中删除元素?

标签 java android firebase kotlin google-cloud-firestore

我有一组用户。每个用户都有一个名为 favoriteNames 的数组。

root <- [Firestore]
 users <- [Collection]
   uid <- [Document]
    favoriteNames: ["Ana", "Jane", "Dave"] <- [Array]
   uid<- [Document]
    favoriteNames: ["Ana", "Merry", "John"] <- [Array]

我想从所有文档中删除“Ana”。这是我尝试过的:

usersRef.whereArrayContains("favoriteNames", FieldValue.arrayRemove("Ana").get()

但是这不起作用。如何从所有数组中删除“Ana”?

最佳答案

无法使用 Firestore 执行类似 SQL 的“更新位置”类型查询。如果您有多个文档需要更新,则必须单独更新每个文档。如果需要,您可以使用事务或批量写入以原子方式执行所有更新。

至少,您在这里需要做的是:

  1. 查询所有要更新的文档。这将涉及执行 array-contains query对于所有“安娜”。

    usersRef.whereArrayContains("favoriteNames", "Ana")
    
  2. 迭代查询结果。

  3. 对于每个匹配的 DocumentSnapshot ,获取其 DocumentReference 并将 update()FieldValue.arrayRemove("Ana")

    结合使用
    snapshot.reference.update("favoriteNames", FieldValue.arrayRemove("Ana"))
    

关于java - 如何从 Firestore 中多个文档的数组中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62675759/

相关文章:

java - 计算和写入重复项

java - 用不同颜色的 Apache POI 填充各个单元格的颜色

android - 模拟器经常断开连接,Android Studio 卡住。如何修复它?

java - 如何使用 Smack XMPP 库创建 SSL 连接?

java - Kotlin找不到符号Function1构建错误

android - 使用 ActionBar 添加自定义标题栏

android - 在 URL.openStream() Android 上设置超时

ios - 使用快速添加的 .Value/.Child 从 Firebase 检索数据时遇到问题

firebase - 在 Flutter 上单击背景通知时如何导航?

android - 任务 ':app:mergeDebugResources' 执行失败。 [string/com.crashlytics.android.build_id] 错误 : Duplicate resources