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