我正在尝试使用firebase.firestore.FieldValue.delete()
从React应用程序删除Firebase文档中的字段,但是它不起作用。读取数据并将其写入文档和馆藏工作正常,但我正在努力使FieldValue
工作。我已经在src/firebase.js
中设置了Firebase实例,如下所示:
import app from 'firebase/app';
import 'firebase/firestore';
var config = {
******
};
class Firebase {
constructor() {
app.initializeApp(config);
this.fv = app.firestore.FieldValue;
this.db = app.firestore();
};
};
export default Firebase;
然后在我正在尝试使用FieldValue
的模块中执行以下操作:
import Firebase from "./firebase.js";
class App extends Component {
constructor(props) {
super(props);
this.firebase = new Firebase();
this.db = this.firebase.db;
this.fv = this.firebase.fv;
};
deleteFunction(id) {
this.db.collection("collection_id").doc("doc_id").update({
field_id: this.fv.delete()
});
}
};
但是,对我来说,导入或文档引用的mentioned here变体都没有成功。我没有收到任何错误,并且我知道Firestore实例运行正常,因为我正在使用它来设置和读取相同的数据。我还通过控制台同时记录了两者,以验证我要删除的field_id
是正确的ID,并且this.fv
是FieldValue
。
我想念什么?我觉得这应该超级容易和直截了当,而我却忽略了一个非常明显的东西,
答案 0 :(得分:2)
我的猜测是您正在尝试删除field_id
所标识的字段,所以说:
// THIS WON'T WORK
let field_id = "fieldToDelete";
this.db.collection("collection_id").doc("doc_id").update({
field_id: this.fv.delete()
})
上面的代码试图删除原本的field_id
字段,该字段可能不存在。
您需要使用[]
表示法来构建传递给Firestore的对象。
let field_id = "fieldToDelete";
let updates = {};
updates[field_id] = this.fv.delete()
this.db.collection("collection_id").doc("doc_id").update(updates)
现在,您在调用Firestore时使用field_id
的 value ,它将删除fieldToDelete
。