自动为文档生成ID,而不是在Firestore中生成ID

时间:2018-10-19 21:48:06

标签: android firebase google-cloud-firestore

我已经浏览了Firestore文档,但还没有找到一个示例,其中有类似的内容。

collection
       |--document
                |--{auto-generated-id}
                                  |--property1:value1
                                  |--property2:value2
                                  |--peoperty3:value3

我经常看到的是:

collection     
         |--{auto-generated-id}
                            |--property1:value1
                            |--property2:value2
                            |--peoperty3:value3

在前一种情况下,我无法在文档上调用add()-(生成唯一ID)。但是,可以在集合中完成此操作,如上面的后一个草图所示。

因此,我的问题是: Firestore是否有办法在创建文档后帮助自动生成ID 即 我如何实现这样的目标:

db.collection("collection_name").document("document_name").add(object)

5 个答案:

答案 0 :(得分:4)

如果您使用的是CollectionReference的add()方法,则意味着:

  

使用指定的POJO作为内容向此集合添加一个新文档,并自动为其分配一个文档ID。

如果要获取生成的文档ID并在引用中使用它,请使用DocumentReference的set()方法:

  

覆盖此DocumentRefere引用的文档

就像下面的代码行一样:

val pyScript = "wasb://scripts@myAccount.blob.core.windows.net/print.py"
val pyScriptName = "print.py"
spark.sparkContext.addFile(pyScript)
val ipData = sc.parallelize(List("abc","def","ghi"))
val opData = ipData.pipe(org.apache.spark.SparkFiles.get(pyScriptName))
opData.foreach(println)

答案 1 :(得分:1)

要在 Flutter/dart 中实现这一点,您可以将 Future 设为 1。 在 firestore 中创建文档(firestore 会自动为文档生成 ID),2).< /strong>然后调用创建的文档,3).最后显示id OR更新ID字段

Future createPost(PostModel postModel) async {
  _firestore.collection("posts").add({

  "pid": postModel.pid, // Creating a field for post ID

  }).then((querySnapshot) { // Here whe call the document just after creation

  String generatedID = querySnapshot.id.toString(); // Here we call the ID of the document

  print("ID OF CREATE POST: " + generatedID); // Here we display the generated document ID

  querySnapshot.update({ // Here we update the pid(Post ID) field in the new generated document
    "pid": generatedID
  });
});

}

答案 2 :(得分:0)

由于您已经知道文档的ID,因此只需调用set()而不是add()。如果尚不存在,它将创建文档。

答案 3 :(得分:0)

这个答案可能有点晚了,但是您可以在这里查看下面的代码,它将生成一个新的文档名称:

// Add a new document with a generated id.
db.collection("cities").add({
    name: "Tokyo",
    country: "Japan"
})
.then(function(docRef) {
    console.log("Document written with ID: ", docRef.id);
})
.catch(function(error) {
    console.error("Error adding document: ", error);
});

让Cloud Firestore为您自动生成ID更方便。您可以致电add()

Add data to Cloud Firestore

上了解有关此内容的更多信息

答案 4 :(得分:0)

当您将文档添加到集合中时,响应对象将包含创建的文档的 id。所以你可以在javascript中解构响应对象,直接使用这个id。

(async () => {
   const dataObject = YOUR_DATA;
   const { id } = await firebase.firestore().collection("YOUR_COLLECTION_NAME").add(dataObject);
   console.log(id); //the newly added doc's id
})()