Firestore - 在添加之前是否可以获取ID?

时间:2017-10-20 08:13:02

标签: firebase google-cloud-firestore

我知道Realtime Database我可以在push ID之前添加 DatabaseReference databaseReference= FirebaseDatabase.getInstance().getReference(); String challengeId=databaseReference.push().getKey(); ,如下所示:

Cloud Firestore?

然后我可以使用此ID添加它。

我是否也可以在$(document).ready(function() { alert('aaa'); $(document).on("click", ".items-layout > div", function() { var $this = $(this); $this.addClass('hover-effect').off("click"); setTimeout(function() { $this.removeClass('hover-effect'); alert('yolo'); }, 1000); });

中获取它

13 个答案:

答案 0 :(得分:65)

documentation中介绍了这一点。请参阅添加文档部分的最后一段。

DocumentReference ref = db.collection("my_collection").document();
String myId = ref.getId();

答案 1 :(得分:16)

const db = firebase.firestore();
const ref = db.collection('your_collection_name').doc();
const id = ref.id;

答案 2 :(得分:11)

projectsRef 是firestore collection ref。

data 是您要上传到firestore的具有键值的对象。

afs 是在构造函数

中注入的angularfirestore模块

您可以通过以下方式执行此操作(代码适用于AngularFire2 v5,类似于任何其他版本的firebase SDK,例如web,节点等。)

Task.Run

这将在Collection中生成一个名为projectsRef的新文档,其id为pushKey,该文档的pushKey属性与文档的id相同

请记住,set也会删除任何现有数据

实际上.add()和.doc()。set()与.add()相同,id是自动生成的, 使用.doc()。set()可以提供自定义ID。

答案 3 :(得分:3)

IDK(如果有帮助的话),但是我想从Firestore数据库中获取文档的ID,即已经输入到控制台中的数据。

我想要一种简单的方式来快速访问该ID,所以我只是将其添加到文档对象中,如下所示:

const querySnapshot = await db.collection("catalog").get();
      querySnapshot.forEach(category => {
        const categoryData = category.data();
        categoryData.id = category.id;

现在,我可以像访问其他任何属性一样访问该id

IDK为什么id首先不只是.data()的一部分!

答案 4 :(得分:2)

不幸的是,这不起作用:

let db = Firestore.firestore()

let documentID = db.collection(“myCollection”).addDocument(data: ["field": 0]).documentID

db.collection(“myOtherCollection”).document(documentID).setData(["field": 0])

它不起作用,因为第二条语句在documentID完成获取文档ID之前执行。因此,在设置下一个文档之前,您必须等待documentID完成加载:

let db = Firestore.firestore()

var documentRef: DocumentReference?

documentRef = db.collection(“myCollection”).addDocument(data: ["field": 0]) { error in
    guard error == nil, let documentID = documentRef?.documentID else { return }

    db.collection(“myOtherCollection”).document(documentID).setData(["field": 0])
}

这不是最漂亮的,但这是完成您所要询问的唯一方法。这段代码在Swift 5中。

答案 5 :(得分:1)

对于node.js运行时

const documentRef = admin.firestore()
  .collection("pets")
  .doc()

await admin.firestore()
  .collection("pets")
  .doc(documentRef.id)
  .set({ id: documentRef.id })

这将创建一个具有随机ID的新文档,然后将文档内容设置为

{ id: new_document_id }

希望可以很好地解释其工作原理

答案 6 :(得分:0)

这对我有用。我在同一事务中更新文档。我创建了文档,并立即使用文档ID更新了文档。

        let db = Firestore.firestore().collection(“cities”)

        var ref: DocumentReference? = nil
        ref = db.addDocument(data: [
            “Name” : “Los Angeles”,
            “State: : “CA”
        ]) { err in
            if let err = err {
                print("Error adding document: \(err)")
            } else {
                print("Document added with ID: \(ref!.documentID)")
                db.document(ref!.documentID).updateData([
                    “myDocumentId” : "\(ref!.documentID)"
                ]) { err in
                    if let err = err {
                        print("Error updating document: \(err)")
                    } else {
                        print("Document successfully updated")
                    }
                }
            }
        }

很高兴找到一种更清洁的方式来做到这一点,但在那之前这对我有用。

答案 7 :(得分:0)

在飞镖中,您可以使用:

`var itemRef = Firestore.instance.collection("user")
 var doc = itemRef.document().documentID;
 await itemRef.document(doc).setData(data).then((val){
   print("document Id ----------------------: $doc");
 });`

答案 8 :(得分:0)

在节点中

var id = db.collection("collection name").doc().id;

答案 9 :(得分:0)

最简单和更新的方法(2019)是对主要问题的正确答案:

  

“是否可以在添加ID之前获取ID?”

// Generate "locally" a new document in a collection
const document = yourFirestoreDb.collection('collectionName').doc();

// Get the new document Id
const documentUuid = document.id;

// Sets the new document (object that you want to insert) with its uuid as property
const response = await document.set({
      ...yourObjectToInsert,
      uuid: documentUuid
});

答案 10 :(得分:0)

要在保存为Python之后获取ID:

doc_ref = db.collection('promotions').add(data)
return doc_ref[1].id

答案 11 :(得分:0)

docs for generated id

我们可以在文档中找到<ul class="three"> <li class="unordered-list A">A</li> <li class="unordered-list B">B</li> <li class="unordered-list C">C</li> <li class="unordered-list D">D</li> <li class="unordered-list E">E</li> <li class="unordered-list B-1">B-1</li> <li class="unordered-list B-2">B-2</li> <li class="unordered-list B-3">B-3</li> </ul>方法。他们将生成新的ID,并在此基础上创建新的ID。然后使用doc()方法设置新数据。

set()

答案 12 :(得分:0)

您可以使用辅助方法生成 Firestore-ish ID,然后调用 collection("name").doc(myID).set(dataObj) 而不是 collection("name").add(dataObj)。如果 ID 不存在,Firebase 将自动创建文档。

辅助方法:

/**
 * generates a string, e.g. used as document ID
 * @param {number} len length of random string, default with firebase is 20
 * @return {string} a strich such as tyCiv5FpxRexG9JX4wjP
 */
function getDocumentId (len = 20): string {
  const list = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ123456789";
  let res = "";
  for (let i = 0; i < len; i++) {
    const rnd = Math.floor(Math.random() * list.length);
    res = res + list.charAt(rnd);
  }
  return res;
}

用法:const myId = getDocumentId()