Firebase 删除字段中的特定内容

Posted

技术标签:

【中文标题】Firebase 删除字段中的特定内容【英文标题】:Firebase remove specific in a the field 【发布时间】:2021-12-21 19:20:34 【问题描述】:

我是原生反应新手,我正在尝试删除特定字段但遇到问题

我正在尝试删除 FriendList 中的 cm0IF5KopLgxnJTUtfi403kJuMl2

这是我的代码:

export default function deletefriends(FriendsUID)

    const friendremove = async() =>

        // get current users uid
        const Uid = firebase.auth().currentUser.uid

        // define the current users 
        const currentUID = firebase.firestore().collection('users').where(
            "UID", "==", firebase.auth().currentUser.uid).get();
           
        // add the other users uid to current users friendlist
        currentUID.then((querySnapshot) => 

        querySnapshot.forEach((doc) => doc.ref.update(

            FriendsList:FriendsUID.delete())
        )
    )
    

    

如何删除 FriendsUID?

【问题讨论】:

【参考方案1】:

因为您使用的是 ID 映射而不是数组,所以您需要将代码更改为(省略不相关的部分):

(doc) => 
  const friendsListMap = doc.get('FriendsList');
  delete friendsListMap[uidToDelete];
  return doc.ref.update( FriendsList: friendsListMap );

(doc) => 
  return doc.ref.update(
    [`FriendsList.$uidToDelete`]: firebase.firestore.FieldValue.delete()
  );

您应该更新您的代码以正确地将 Promise 链接在一起(有些是浮动的,使用 querySnapshot.docs.mapPromise.all)并考虑使用 transaction 来执行这些更改,这样您就可以确保数据不是被误删了。

【讨论】:

【参考方案2】:

如果您尝试从FriendsList 数组中删除单个项目,则需要arrayRemove 操作。来自updating items in an array的文档:

await washingtonRef.update(
    regions: arrayRemove("east_coast")
);

【讨论】:

嗨,弗兰克,我使用了 FriendsList: firebase.firestore.FieldValue.arrayRemove(FriendsUID)),它可以工作,但它删除了 FriendsList 中的所有内容。我只需要删除一个。我该怎么做? 另外,FriendList是一个map,运行remove函数后变成数组,变成空的。

以上是关于Firebase 删除字段中的特定内容的主要内容,如果未能解决你的问题,请参考以下文章

在firebase中的数组中添加一个字段而不删除firebase中的其他字段[重复]

如何从Swift中的Cloud FireStore Firebase访问特定字段

从备注字段的内容中删除特定行

iOS 10 Firebase 通知未在后台显示

如何使用 Swift 从 UITableViewCell 中删除 Firebase 中的特定子节点

如何从 ListView 中删除 Firebase Android 中的特定节点