Google cloud firestore FieldValue.delete()不会删除firestore文档中的字段键

Google cloud firestore FieldValue.delete()不会删除firestore文档中的字段键,google-cloud-firestore,Google Cloud Firestore,我正在使用FieldValue.delete()从映射中删除一个字段,并插入firestore文档,但密钥仍在映射中。我想删除键,而不仅仅是将空对象设置为值 // Get the FieldValue object var FieldValue = require('firebase-admin').firestore.FieldValue; // Create a document reference var exampleDocRef = db.collect

我正在使用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()}
    });

删除键/值对的一种方法是在exampleDocRef上运行get(),然后像删除任何常规对象的键/值对一样删除它,然后在删除后更新文档

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()方法。这将同时从对象中删除键和值。

我遇到了与此相同的问题。在我的例子中,我用于对象键的变量实际上没有被使用。但不知何故,该变量的数据仍然被提取出来。老实说,我甚至不知道发生了什么。但这对我有用

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

// 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()
});


请提供一些示例代码,包括FieldValue.delete()行和获取FieldValue对象的行刚刚更新了帖子我刚刚创建了一个包含两个字段的文档
/cities/BJ
,其中一个是
capital
,运行您的代码,
capital
字段从控制台中消失。你有什么问题?您正在运行哪个版本的
firebase admin
?我用5.9.0进行了测试。我刚刚更新了该问题,之前没有准确描述该问题。这对我来说很有效:这会使你面临覆盖地图其他更新的风险,并且你会向数据库添加额外的调用。你完全正确。第一条路是一条崎岖不平的路。我已经修改了我的答案。这个myMap.myKey:FieldValue.delete()-应该是[`myMap`.${myKey}]:FieldValue.delete()。对象内的点表示法将生成错误。