当前位置: 首页 > 知识库问答 >
问题:

Firestore-如何在将文档添加到集合后获取文档id

包德业
2023-03-14

是否有方法获取将文档添加到集合后生成的文档id?

如果我将文档添加到代表社交媒体软件中“帖子”的集合中,我想获取该文档ID并将其用作不同集合中另一个文档中的字段。

如果我无法获取添加文档后生成的文档Id,我是否应该计算一个随机字符串,并在创建文档时提供Id?这样我就可以使用与其他文档中的字段相同的字符串了?

快速结构示例:

POST (collection)
    Document Id - randomly generated by firebase or by me
USER (collection)
    Document Id - randomly generated by firebase
       userPost: String (this will be the document id 
                         in the post collection that I'm trying to get)

共有3个答案

洪宏硕
2023-03-14

如果要使用异步/等待而不是代码。然后(),您可以这样编写:

const post = async (doc) => {
    const doc_ref = await db.collection(my_collection).add(doc)
    return doc_ref.id
}

如果您想捕获此函数中的任何错误,请包含. catch()

    const doc_ref = await db.collection(my_collection).add(doc).catch(err => { ... })

或者您可以让调用函数捕捉错误。

华温书
2023-03-14

如果使用promise,我建议使用胖箭头函数,因为它打开了使用this.foo的可能性,即使在. then函数中也是如此

    db.collection("cities").add({
        name: "Tokyo",
        country: "Japan"
    })
    .then(docRef => {
        console.log("Document written with ID: ", docRef.id);
        console.log("You can now also access this. as expected: ", this.foo)
    })
    .catch(error => console.error("Error adding document: ", error))

使用功能(docRef)意味着您无法访问此功能。foo,将引发错误

    .then(function(docRef) {
        console.log("Document written with ID: ", docRef.id);
        console.log("You can now NOT access this. as expected: ", this.foo)
    })

而胖箭头函数将允许您按预期访问this.foo

    .then(docRef => {
        console.log("Document written with ID: ", docRef.id);
        console.log("You can now also access this. as expected: ", this.foo)
    })

编辑/添加2020:

现在更流行的方法可能是使用异步/等待。请注意,您必须在函数声明之前添加异步:

    async function addCity(newCity) {
      const newCityAdded = await db.collection("cities").add(newCity)
      console.log("the new city:", newCityAdded)
      console.log("it's id:", newCityAdded.id)
    }

如果您只需要id,则可以使用Destructuring获取它。分解允许您获取响应中的任何键/值对:

    async function addCity(newCity) {
      const { id } = await db.collection("cities").add(newCity)
      console.log("the new city's id:", id)
    }

也可以使用解构来获取值并重命名为您想要的任何内容:

    async function addCity(newCity) {
      const { id: newCityId } = await db.collection("cities").add(newCity)
      console.log("the new city's id:", newCityId)
    }
公孙慎之
2023-03-14

是的,这是可能的。当您在集合上调用. add方法时,会返回一个DocumentResources对象。DocumentResources具有id字段,因此您可以在创建文档后获取id。

// 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);
});

此示例在JavaScript中。访问其他语言的留档。

 类似资料:
  • 在我们仔细处理之后。我仍然无法获取自动生成的文档ID。没有“then”选项。我的代码: 创建后如何获取ID?

  • 问题内容: 没有关于如何在Firestore中的文档中添加子集合,如何使用Web应用程序添加子集合的文档? 甚至像这样尝试过,但没有奏效。如何使用代码在应用程序中添加子集合?有什么办法可以做到,还是使用Firebase实时数据库会更好?如果是这样,请让我知道如何在Firebase中执行此操作,我也想这样添加, 但我却收到这样的错误,错误说明了这一点 问题答案: 如果更改为,您的代码应该可以工作。然

  • 问题内容: 对于我的应用程序而言,至关重要的是能够从Firebase的集合中随机选择多个文档。 由于Firebase(我知道)没有内置本机函数来实现执行此操作的查询,因此我的第一个想法是使用查询游标选择随机的起始索引和终止索引,前提是我拥有​​其中的文档数集合。 这种方法行之有效,但只能以有限的方式进行,因为每次每次文档都会与其相邻文档一起依次送达。但是,如果我能够通过其父集合中的索引选择一个文档

  • 您好,我是firebase firestore的新手,无法将对象直接添加到集合中查看图像错误结果和预期结果 尝试 它在余额集合下创建一个新文档,但我需要它的Object值直接在余额集合中

  • 我想创建一个集合而不在其中创建任何文档。但不是先创建文档,然后删除文档。我尝试了一些方法,但当我删除文档时,我的集合也被删除了。 Firestore图像

  • 我现在有一个firestore,看起来像这样: 我使用的是,我试图获取“报告”集合中的所有文档。 我可以得到一个报告: 但我无法得到整个子集合 这可能吗?我是新手,所以这可能是一个愚蠢的问题。 谢谢 编辑控制台中收到的错误消息是: 我不确定权限,我没有访问权限,但如果是权限问题,我很困惑,我可以从集合中获取一个文档,但找不到获取所有文档的方法