firebase.firestore.FieldValue.delete() 不删除文档中的字段

pks*_*pks 2 javascript firebase reactjs google-cloud-firestore

我正在尝试从使用的 React 应用程序中删除 Firebase 文档中的字段,firebase.firestore.FieldValue.delete()但它不起作用。在文档和集合中读取和写入数据工作正常,但我正在努力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;
Run Code Online (Sandbox Code Playgroud)

然后在我正在尝试使用的模块中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()
    });
  }
};
Run Code Online (Sandbox Code Playgroud)

然而,这里提到的导入或文档引用的变化对我来说没有成功。我没有收到任何错误,我知道 firestore 实例工作正常,因为我使用它来设置和读取相同的数据。我还验证了field_id我试图删除的 id 是正确的,这this.fvFieldValue通过控制台记录它们的。

我错过了什么?我觉得这应该非常简单直接,而且我忽略了一些非常明显的东西,

Fra*_*len 5

我的猜测是您正在尝试删除由 标识的字段field_id,所以说:

// THIS WON'T WORK
let field_id = "fieldToDelete";
this.db.collection("collection_id").doc("doc_id").update({
  field_id: this.fv.delete()
})
Run Code Online (Sandbox Code Playgroud)

上面的代码试图删除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)
Run Code Online (Sandbox Code Playgroud)

现在您在调用 Firestore 时使用 的field_id它将删除fieldToDelete