fieldValue.delete()未在Firestore文档中删除字段键



我正在使用fieldvalue.delete((从地图上删除firestore文档,但键仍在地图上。我想删除键,而不仅仅是将一个空对象设置为值。

    // Get the FieldValue object
    var FieldValue = require('firebase-admin').firestore.FieldValue;
    // Create a document reference
    var exampleDocRef = db.collection('myDocumentType').doc('exampleDoc');
    // Remove the key value pair from the map
    var removeKeyValuePairInMap = exampleDocRef.update({
        myMap:{ myKey:FieldValue.delete()}
    });

删除键/值对的一种方法是在exippledocref上运行get((,然后像任何常规对象的键/值对一样删除,然后在之后更新doc删除。

exampleDocRef.get().then(doc => {
    const data = doc.data().myMap //gets it into something you can traverse 
    with dot notation
    delete data[myKey];  //deletes key/value pair
    exampleDocRef.update({ myMap: data}) //now just updating myMap with 
    itself minus the key/value pair you deleted
});

好,在上面的我以前的答案中进行编辑,这是使用变量的更好方法:

exampleDocRef.update({
    myMap.myKey: FieldValue.delete()
 })

您只需要确保您穿越要使用点符号删除的密钥,然后调用delete((方法。这从对象中删除键和值。

这就是您在客户端/浏览器

中的操作方式
firebase.firestore().collection('yourCollection').doc('docID').update({
    "objOne.ObjTwoIfItExists": firebase.firestore.FieldValue.delete()
})

这就是您在云功能中的操作方式

admin.collection('yourCollection').doc('docID').update({
    "objOne.ObjTwoIfItExists": admin.firestore.FieldValue.delete()
})

使用密钥中的点表示法允许您访问嵌套对象。

我面临着与此相同的问题。就我而言,我用于对象密钥的变量实际上没有使用。但是以某种方式仍提取了该变量的数据。老实说,我什至不确定发生了什么。但这对我有用。

要使用变量作为对象内部的键,只需使用方括号。

// Firestore document
exampleDoc ={
   id001: someData,
   id002: someOtherData,
   id003: someOtherOtherData,
}
// Get the FieldValue object
var FieldValue = require('firebase-admin').firestore.FieldValue;
// Create a document reference
var exampleDocRef = db.collection('myDocumentType').doc('exampleDoc');
// Create a variable to use as object key for the field u want to delete
var fieldToDelete = 'id001'
// Remove field from firestore (key & value)
var removeKeyValuePairInMap = exampleDocRef.update({
   [fieldToDelete]: FieldValue.delete()
});

对于firebase v9 ,这对我有用

import { deleteField, updateDoc, doc } from 'firebase/firestore';
updateDoc(doc(db, 'my-collection', 'item-id'), {
     myField: deleteField(),
});

最新更新