Firebase Firestore:从文档数组中追加/删除项目

lux*_*uxo 7 arrays dictionary firebase swift google-cloud-firestore

我正在尝试从 Firestore 文档内的数组中附加/删除项目,但每次替换整个数组而不是附加新值时。我已经尝试了以下两种方法:

batch.setData(["favorites": [user.uid]], forDocument: bookRef, options: SetOptions.merge())

batch.updateData(["favorites": [user.uid]], forDocument: bookRef)
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用对象/字典代替数组,但这意味着存储不相关的其他数据(例如密钥),我需要的只是存储在数组中的 ID。这是 Firestore 目前可以实现的功能吗?

Jos*_*llo 10

更新数组中的元素

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

let washingtonRef = db.collection("cities").document("DC")

// Atomically add a new region to the "regions" array field.
washingtonRef.updateData([
    "regions": FieldValue.arrayUnion(["greater_virginia"])
])

// Atomically remove a region from the "regions" array field.
washingtonRef.updateData([
    "regions": FieldValue.arrayRemove(["east_coast"])
])
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档


An *_* Se 5

事实上,今天这是可能的。使用最新的更新db.collection.updateData 方法实际上将新项目附加到数组而不是替换它。示例用法可以在Firebase 文档中找到。

如果您需要手动执行,则可以使用

FieldValue.arrayUnion([user.uid])
Run Code Online (Sandbox Code Playgroud)