【问题标题】:Delete Field in Firestore Document删除 Firestore 文档中的字段
【发布时间】:2018-04-09 14:32:59
【问题描述】:

如何删除 Cloud Firestore 中的文档字段? ...我正在使用下面的代码,但我不能。

this.db.doc(`ProfileUser/${userId}/followersCount/FollowersCount`).update({ 
[currentUserId]: firebase.firestore.FieldValue.delete()})

有人知道怎么做吗?

【问题讨论】:

    标签: angular typescript firebase ionic3 google-cloud-firestore


    【解决方案1】:

    你可以试试如下图:

    // get the reference to the doc
    let docRef=this.db.doc(`ProfileUser/${userId}/followersCount/FollowersCount`);
    
    // remove the {currentUserId} field from the document
    let removeCurrentUserId = docRef.update({
        [currentUserId]: firebase.firestore.FieldValue.delete()
    });
    

    【讨论】:

    • 感谢您的回复。我在代码中尝试了这个更改,但仍然没有删除该字段,我做了一个测试,我可以使用类似的代码更新布尔值,但是删除函数没有对字段进行任何更改。
    • 查看文档。它应该工作不?你的doc reference呢? firebase.google.com/docs/firestore/manage-data/delete-data
    • 构造函数中缺少var docRef = firebase.firestore ();,我将您的代码更改为var docRef = this.db.doc(ProfileUser/${userId}/followersCount/FollowersCount); let removeCurrentUserId = docRef.update({ [currentUserId]: firebase.firestore.FieldValue.delete() }); 现在完美运行,谢谢!!!跨度>
    • 很高兴听到它有帮助:)
    • firebase.firestore.FieldValue.delete() 不适用于已经是 null 的字段
    【解决方案2】:

    这对我有用。 (也可以删除具有空值的字段)

    document.ref.update({
      FieldToDelete: admin.firestore.FieldValue.delete()
    })
    

    【讨论】:

      【解决方案3】:

      使用 Firebase 版本 9(2022 年 2 月更新):

      如果集合 "users" 具有 一个文档(dWE72sOcV1CRuA0ngRt5),其中包含字段 "name""age ""sex" 如下图:

      users > dWE72sOcV1CRuA0ngRt5 > name: "John", 
                                     age: 21, 
                                     sex: "Male"
      

      您可以使用以下代码删除字段“年龄”

      import { doc, updateDoc, deleteField } from "firebase/firestore";
      
      const userRef = doc(db, "users/dWE72sOcV1CRuA0ngRt5");
      
      // Remove "age" field from the document
      await updateDoc(userRef, {
        "age": deleteField()
      });
      
      users > dWE72sOcV1CRuA0ngRt5 > name: "John",  
                                     sex: "Male"
      

      您可以使用以下代码删除多个字段“age”“sex”

      import { doc, updateDoc, deleteField } from "firebase/firestore";
      
      const userRef = doc(db, "users/dWE72sOcV1CRuA0ngRt5");
      
      // Remove "age" and "sex" fields from the document
      await updateDoc(userRef, {
        "age": deleteField(),
        "sex": deleteField()
      });
      
      users > dWE72sOcV1CRuA0ngRt5 > name: "John"
      

      【讨论】:

      • 这是最好的答案^^
      【解决方案4】:

      由于某种原因,所选答案 (firebase.firestore.FieldValue.delete()) 对我不起作用。 但确实如此:

      只需将该字段设置为null,它将被删除!

      // get the reference to the doc
      let docRef=this.db.doc(`ProfileUser/${userId}/followersCount/FollowersCount`);
      
      // remove the {currentUserId} field from the document
      let removeCurrentUserId = docRef.update({
          [currentUserId]: null
      });
      

      【讨论】:

      • 你说的对你没用的部分,对我有用!谢谢。
      • 将值设置为 null 现在会将值另存为 null 在 Firestore 中。
      • 嗯,@NovelVentures 我刚刚对其进行了测试,如果设置为null,它确实会删除该值!我有一种感觉,您将其设置为 "null" 作为字符串。 -------------------------------------------------- ---------------- PS:从技术上讲,他们永远不会在数据库中存储nullundefined,(当然这些字符串值不再是null 或undefined! ),即使是空字符串(或无值)也无法存储。
      【解决方案5】:

      小心使用这个admin.firestore.FieldValue.delete(),因为如果您尝试删除文档上的不可用字段,查询将不起作用。

      所以,我认为最好设置null

      this.db.doc(`ProfileUser/${userId}/followersCount/FollowersCount`).update({ 
      [currentUserId]: null})
      

      await db.doc(`ProfileUser/${userId}/followersCount/FollowersCount`)
                  .set({[currentUserId]: null}, { merge: true })
      

      【讨论】:

        【解决方案6】:

        我想到的另一个解决方案是,与其关注更新文档删除字段,不如更新整个文档。如:

        let data: Partial<ObjectType> = {
            //some fields here,
            thatField: '',
            //some fields there
        };
        this.angularFirestore.collection('collection_name').doc<ObjectType>('id').set(data);
        

        此外,您可能根本不包括它,而不是初始化该字段。

        【讨论】:

          猜你喜欢
          • 2020-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-31
          • 2019-11-25
          • 2021-09-29
          • 2018-07-28
          • 2021-12-31
          相关资源
          最近更新 更多