我正在使用FieldValue.delete()从火星文档中删除地图中的字段,但该键仍在地图上。我想删除密钥,而不只是将空对象设置为值。
// 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()}
});
答案 0 :(得分:1)
我正面临与此相同的问题。就我而言,我用于对象键的变量实际上并未使用。但是仍然从那个变量中提取数据。老实说,我什至不知道发生了什么。但这对我有用。
要将变量用作对象内的键,只需使用方括号即可。
// 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()
});
答案 1 :(得分:0)
删除键/值对的一种方法是在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()方法即可。这将从对象中删除键和值。