繁体   English   中英

如何从 Firestore 中的数组中删除字段?

[英]How to remove field from array in Firestore?

在此处输入图像描述

我想从 Firestore 的数组中删除一个特定的字段(它是用户 ID)。

我尝试:

 override fun unlikePost(postId: String) {
        FirebaseFirestore.getInstance().collection(postCollection)
            .document(postId).update("likeList", FieldValue.arrayRemove(FirebaseAuth.getInstance().uid))
    }

但是当我这样做时,我在 Firestore 中的likeLIst 更改为:

[]

为什么likePost不删除特定字段而是清除整个数组并更改为[]?

如何从 Firestore 中的数组中删除字段?

致电:

.update("likeList", FieldValue.arrayRemove(FirebaseAuth.getInstance().uid))

确实如此。 这意味着您要从“likeList”数组中删除经过身份验证的用户的 UID。 但是,这并不意味着您要从文档中完全删除数组,因此是该表示。 两个刹车[]代表一个空数组。

那么如何从文档中删除整个数组呢? 您可能认为传递 null 值可能会成功,但它不会,因为 null 是 Firestore 中支持的数据类型 所以调用:

.update("likeList", null)

它将导致:

Firestore-root
   |
   --- posts (collection)
        |
        --- postId (document)
             |
             --- likeList: null (array)

如果您想完全从文档中删除数组,您应该调用:

.update("likeList", FieldValue.delete())

这样,无论数组中存在多少个 UID,您的数组都会从文档中删除。

编辑:

根据您的最后评论:

例如数组中有 5 个 UID。 我只想删除一个特定的。 现在,当我尝试这样做时,我会清除整个数组。

假设您有一个包含两个 UID 的数组,一个是“abc”,第二个是“xyz”。 最后一个是经过身份验证的用户的 UID。 如果你想删除“abc”,你应该调用:

.update("likeList", FieldValue.arrayRemove("abc"))

如果要删除第二个,则应使用:

.update("likeList", FieldValue.arrayRemove("xyz"))

或者:

.update("likeList", FieldValue.arrayRemove(FirebaseAuth.getInstance().uid))

因为FirebaseAuth.getInstance().uid返回“xyz”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM