【问题标题】:Firestore & Cloud Function: Create new collection document using my own Document IDFirestore 和 Cloud Function:使用我自己的 Document ID 创建新的集合文档
【发布时间】:2020-11-28 04:28:01
【问题描述】:

关于 Firestore、Cloud Function、Typescript。

我的目标:

  1. 新用户注册应用。
  2. 新用户触发云函数(打字稿)以使用新文档填充我的 Firestore UserAccounts 集合。
  3. Cloud Function 使用来自 Firebase Auth 的用户 UID 作为要添加到 UserAccounts 集合的新文档的文档 ID。

问题: 创建了一个新文档,但是它使用自动生成的文档 ID,并且文档本身有一个额外的文档 ID 字段。

注意:使用 Firebase 网站,我可以使用自己的文档 ID 手动将新文档添加到集合中。

示例代码:

export const onNewRegistration = functions.auth.user().onCreate((user) => {
    functions.logger.info("New User Created - Name: ", user.email, ", UID: ", user.uid);
    const db = admin.firestore();
    const newdoc = db.collection('UserAccounts').add({
        'Document ID': user.uid,
        State: 'Unverified'
    });

    return newdoc;
});

谢谢大家。

【问题讨论】:

    标签: typescript firebase google-cloud-firestore


    【解决方案1】:

    如果您知道要创建的文档的 ID,请不要使用 add()。 add() 总是使用新的随机 ID 创建一个新文档。

    您应该改用doc() 来创建具有给定ID 的新文档引用,然后使用set() 来编写它:

    return db.collection('UserAccounts').doc(user.uid).set({
        // fields and values here will be written to the document
    });
    

    另请参阅:Firestore: difference between set() and add()

    【讨论】:

    • 工作就像一个魅力。谢谢你的帮助,道格。
    • 太棒了!在 Stack Overflow 上,习惯上使用左侧的按钮来投票和接受有用的答案。
    • 嘿道格 - 我确实投了赞成票,但由于我是菜鸟,所以它不会反映在页面上,认为它在幕后很重要。
    • 你一定知道一些我不知道的关于 Stack Overflow 的事情!但是你能再试一次吗?完成后,它应该同时显示“1”和绿色复选标记。他们都以这样的方式结束。没有任何隐藏投票。
    • 复选标记现在是绿色的(我错过了)。至于upvote,会显示如下信息:“感谢反馈!声望低于15的人的投票将被记录,但不要更改公开显示的帖子分数。”
    猜你喜欢
    • 2021-12-25
    • 2020-01-11
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2020-12-17
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多