firebase.firestore.FieldValue.delete()不会删除文档

时间:2020-01-06 14:59:39

标签: javascript reactjs firebase google-cloud-firestore

我正在尝试使用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.fvFieldValue

我想念什么?我觉得这应该超级容易和直截了当,而我却忽略了一个非常明显的东西,

1 个答案:

答案 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