firebase 在Firestore中新建文档时返回文档ID

sc4hvdpw  于 2023-10-22  发布在  其他
关注(0)|答案(2)|浏览(142)

我在“projects”集合中创建了一个新项目,代码如下:

addProject(project:any) {
    let projectsCollection = collection(this.firestore,'projects');
    return addDoc(projectsCollection,project);
  }

我需要这个函数来返回创建的文档的ID,因为我以后需要在这个文档中添加一个新的集合。换句话说,我需要接收在Angular服务中创建的文档的ID,以继续我的逻辑,这可能吗?
在创建项目之后,我需要调用这个新函数(下面的函数)来在上面创建的项目中添加一个新的集合。

addService(service: any) {
    let projectsCollection = collection(this.firestore,'projects', (here is the ID of the project created above..), 'projectDetailService');
    return addDoc(projectsCollection,service);
  }

但我找不到获取新创建的项目ID的方法。有人能以任何方式帮助我吗?谢谢
我尝试了不同的方法,都没有成功。

gudnpqoy

gudnpqoy1#

编辑:我刚刚注意到这个问题涉及到角。我猜angular有一些firebase库使用observable而不是promise,在这种情况下,我的代码示例将无法完全工作。
addDoc创建的promise解析为一个文档引用,该引用有一个id:

async someFunction() {
  const docRef = await addProject('foo');
  console.log('Doc id:', docRef.id);
}

或者如果您更喜欢.then而不是async/await

addProject('foo')
  .then(docRef => {
    console.log('Doc id:', docRef.id);
  });
blpfk2vs

blpfk2vs2#

使用Firebase,你可以创建一个文档,而不需要提供id,这个函数就是AddDocument。另一个函数是SetDocument,它要求你为文档提供一个id,如果文档还不存在,这个函数会创建文档,如果文档已经存在,它会更新整个文档。还有其他功能,如更新,让您更新文档的特定字段。
正如你已经说过的,在第一个示例中,如果你使用add函数,你可以通过将函数的结果保存在一个变量(如docRef)中来获得一个docid。如果你想使用set函数,你可以用UUID或任何其他库创建文档id,并将其保存为对象的属性,就这样了。
我不太清楚firebase给Angular用户的api,我用过react,它提供了正常的firebase功能,也用过ios,它给了你一些特定的api,但是crud的基本操作仍然是一样的,从firebase的add,set,update,delate功能。

相关问题