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]
我想从所有文档中删除“安娜”。这是我尝试的:
usersRef.whereArrayContains("favoriteNames", FieldValue.arrayRemove("Ana").get()
但这是行不通的。如何从所有阵列中删除“Ana”?

最佳答案

无法使用Firestore进行类似SQL的“更新位置”类型查询。如果要更新多个文档,则必须分别更新每个文档。如果需要,您可以使用事务或批处理写入来自动进行所有更新。
最少,您将在这里要做的是:

  • 查询所有要更新的文档。这将涉及对所有“Ana”执行array-contains query
    usersRef.whereArrayContains("favoriteNames", "Ana")
    
  • 迭代查询结果。
  • 对于每个匹配的DocumentSnapshot,获取其DocumentReference并将update()FieldValue.arrayRemove("Ana")一起使用
    snapshot.reference.update("favoriteNames", FieldValue.arrayRemove("Ana"))
    
  • 关于java - 如何从Firestore中的多个文档中的数组中删除元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62675759/

    相关文章:

    ios - 由于Firebase查询中的大量元素而处理内存使用情况

    javascript - AngularFirebaseAuth : Calling server api just after firebase auth?

    java - 如何在https连接上检索cookie?

    java - 当我更改页面方向时,请转到页面开头

    javascript - 默认情况下如何将NativeScript设置为RTL布局

    android - 有什么方法可以自定义消息“除非您更新Google Play服务,否则此应用将无法运行”或根据用户选择跳过消息

    android - 文件 google-services.json 丢失。如果没有 ionic 3,Google 服务插件将无法运行

    java - JTable中的选定行未突出显示

    java - PlayFramework (2.5.x) 不绑定(bind)来自表单的数据返回 Ojbect 与空字段

    Java IDE Diaox 框被遮挡(Ubuntu 上的 Intellij)