【问题标题】:Removing map elements from Google Cloud Firestore从 Google Cloud Firestore 中移除地图元素
【发布时间】:2020-05-26 04:09:17
【问题描述】:

我正在尝试从 Google Cloud Firestore 中删除地图。

我使用以下代码在 Firestore 中进行更新

fun updateData(userId: String, values: Map<String, Any>) =
        db.collection(COLLECTION_DATA).document(Id).update(values)

该文档包含为 google 登录生成的使用的 id,并且文档中的字段之一是 map&lt;Key,Value&gt; 。我正在尝试删除字段的内容(删除特定的&lt;key,value&gt; 对)

我在调用上述firestore函数时将(userId, mapOf("FieldName.${Key}" to FieldValue.arrayRemove(Value)))作为参数传递。

但在 Firestore 中更新值后,键被遗漏并且值被清除。

如果我将(userId, mapOf("FieldName" to FieldValue.arrayRemove(Key))) 作为参数传递,那么整个map&lt;&gt; 将被删除(这是我想要的),但在执行更新后字段的数据结构将转换为数组。

【问题讨论】:

  • 我不清楚您到底要删除什么。请编辑问题以解释更新前文档中的确切内容,以及更新后您希望它包含的内容。如果不容易用文字说明,文档的屏幕截图可能会有所帮助。
  • 我已经编辑了这个问题。我希望现在可以理解了。感谢您的回复

标签: android firebase kotlin google-cloud-firestore


【解决方案1】:

FieldValue.arrayRemove() 仅适用于数组类型字段。它在这里不起作用,因为您实际上并没有使用任何数组或列表。

您只想使用FieldValue.delete() 来删除任何映射键及其值。

updateData(userId, mapOf("FieldName.${Key}" to FieldValue.delete()))

【讨论】:

  • 非常感谢。有效。我之前曾尝试使用 FieldValue.delete,但使用方式错误!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-10
  • 2019-06-25
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多