【问题标题】:Firebase cloud functions: is `createId()` available on the server side?Firebase 云功能:服务器端是否提供`createId()`?
【发布时间】:2020-03-29 10:04:20
【问题描述】:

如果我想从客户端写入数据库,我可以注入一个AngularFirestore 实例并使用createId() 自动生成一个id:

const individualId = this.angularFirestore.createId();

但如果我想在云功能中做同样的事情,使用 Firestore 管理 API,我找不到等效的操作。我可以通过运行在云函数中创建一个 Firestore 实例

const db = admin.firestore();

但是,创建的对象没有可用的createId() 函数。

我可以在云函数中使用与createId() 等效的方法吗?

【问题讨论】:

    标签: firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    我从 issuearticle 了解到“AngularFirestore.createId() 从名为 '_' 的符号集合生成一个新 id”。

    如果您想在 Cloud Function 中模拟这种行为,您可以使用 CollectionReferencedoc() 方法而不指定任何路径。你会得到一个DocumentReference,然后你可以使用id属性来获取“被引用文档的最后一个路径元素”。

    类似于以下内容:

    const db = admin.firestore();
    const docRef = db.collection('_').doc();
    const newId = docRef.id;
    

    请注意,正如上面提到的问题中所解释的,“使用通用集合而不是实际集合”来生成 id 有点奇怪,因为您通常会使用要在其中创建的集合一个新的文件。但这不是问题,根据 James Daniels(Firebaser)的comment,因为 Firestore 自动生成的 ID“只是一个随机字符串,根本不考虑路径”。

    【讨论】:

    • 说得通。
    【解决方案2】:

    在 JavaScript 中,用于新的 Firebase 9(2022 年 1 月)。就我而言,我正在开发一个 cmets 部分:

    const commentsReference = await collection(database, 'yourCollection');
    await addDoc(commentsReference, {
      ...comment,
      id: doc(commentsReference).id,
      date: firebase.firestore.Timestamp.fromDate(new Date())
    });
    

    doc() 包装集合引用(commentsReference)提供了一个标识符(id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      • 2020-10-02
      • 1970-01-01
      • 2021-10-12
      • 2019-12-23
      • 1970-01-01
      相关资源
      最近更新 更多