Google cloud firestore FieldValue.delete()不会删除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
// 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()。对象内的点表示法将生成错误。