【问题标题】:Delete a field from Firestore, with a dynamic key使用动态键从 Firestore 中删除字段
【发布时间】:2018-05-07 06:19:28
【问题描述】:

我正在尝试从 Firestore 中的文档中删除单个字段 字段的键保存在变量中,例如

var userId = "random-id-1"

在文档中,我有一个结构如下的成员字段:

{
  members:{
    random-id-1:true,
    random-id-2:true
  }
}

我想删除random-id-1:true,但保留random-id-2:true

如果不获取整个成员对象并编写更新的对象,这怎么可能?

我已经尝试过this,但是我得到了错误:Document references must have an even number of segments

我也试过这个:

db.collection('groups').doc(this.props.groupId).set({
  members: {
    [userId]: firebase.firestore.FieldValue.delete()
  }
},{merge: true})

但是我得到了错误:Function DocumentReference.update() called with invalid data. FieldValue.delete() can only appear at the top level of your update data

感谢您的帮助

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    我已经设法删除了这样的字段:

    let userId = "this-is-my-user-id"
    let groupId = "this-is-my-group-id"
    
    db.collection('groups').doc(groupId).update({
      ['members.' + userId]: firebase.firestore.FieldValue.delete()
    })
    

    这是使用here描述的点运算符方法

    如果有任何替代方法,请告诉我

    谢谢

    【讨论】:

    • 如果我们尝试删除文档中不存在的字段会怎样?
    【解决方案2】:

    我必须导入 FieldValue

    https://firebase.google.com/docs/firestore/manage-data/delete-data#fields

            // Get the `FieldValue` object
            var FieldValue = require('firebase-admin').firestore.FieldValue;
            
            // Create a document reference
            var cityRef = db.collection('cities').doc('BJ');
            
            // Remove the 'capital' field from the document
            var removeCapital = cityRef.update({
              capital: FieldValue.delete()
            });

    【讨论】:

    • 如果我们尝试删除文档中不存在的字段会怎样?
    猜你喜欢
    • 2019-11-25
    • 2011-01-31
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多