获取Firestore文档的新ID,将其添加到文档本身

时间:2020-03-23 03:06:28

标签: javascript firebase google-cloud-firestore angularfire2

根据文档 here,应该有可能获得尚未创建的Firestore文档的ID,将其添加到要保存的对象,然后像这样持久保存它:

// Add a new document with a generated id.
var newCityRef = db.collection("cities").doc();

// later...
newCityRef.set(data);

在我的应用程序中,我使用以下代码遵循此模式:

   async createNewProject(projectObject : Project) : Promise<boolean> {
      let doc =  this.firestore.collection("projects").doc();
      projectObject.id = doc.ref.id;
      try {
      await doc.set(projectObject);
      } catch(err) {
        console.error(err);
        return false;
      }
      return true;
   } 

虽然运行,但在控制台中出现错误:

FirebaseError:函数CollectionReference.doc()要求其第一个参数的类型为非空字符串,但是它是:undefined

有人可以照亮吗?我见过其他人在引用此方法(使用不带参数的doc方法作为问题的解决方案,但其他人则看到此错误。这是该API的Angular实现上的某种API还是一个问题?在事情的火力方面(或者我做错了什么?)

1 个答案:

答案 0 :(得分:0)

doc()方法返回一个DocumentReference,该属性不具有 static Database _db; Future<Database> get db async { if(_db != null) return _db; _db = await initDb(); return _db; } //Creating a database with name test.dn in your directory initDb() async { io.Directory documentsDirectory = await getApplicationDocumentsDirectory(); String path = join(documentsDirectory.path, "test.db"); var theDb = await openDatabase(path, version: 1, onCreate: _onCreate); return theDb; } checkDb(){ //do operation var dbClient = await db; } 属性,但是具有一个ref属性。因此,您需要执行以下操作:

id

代替

projectObject.id = doc.id;