【问题标题】:Firebase: how to add auto-generated document id to the document in svelte?Firebase:如何将自动生成的文档 ID 添加到 svelte 中的文档中?
【发布时间】:2022-01-04 20:39:33
【问题描述】:

在 svelte 中添加具有自动生成 id 的 firebase 文档的正确方法是什么?

到目前为止,我使用的是以下代码 sn-p:

db.collection('colname').add({ id:'temp', text:'sometext' }).then(
    result=>{
        db.collection('colname').doc(result.id).update({id: result.id});
    }
);

我不喜欢这个解决方案的地方:

  1. 与数据库有 2 个单独的交互;
  2. Svelte 将内容呈现 2 次,即在每次数据库交互之后。这也是我需要在add()中添加一个临时id的原因。

有没有更简洁的解决方案?


上下文

我想将文档作为参数传递给一个苗条的 SvelteSubComponent:

let docs = [];
db.collection('colname').onSnapshot(data =>{
    docs=data.docs;    
});

(...)

{#each docs as doc}
<SvelteSubComponent {...doc.data()}/>
{/each}

我希望能够访问 SvelteSubComponent 中的文档 ID。

【问题讨论】:

  • 需要文档 ID 是 Firebase 生成的 ID,还是可以是任何唯一的、随机生成的 ID?
  • @ThomasHennes 我想我真的不需要由 Firebase 专门生成 id。但是我想确定 id 是 unique,并且我可以通过它的 id 轻松获取文档(即类似 db.collection('colname').doc('docId') 的东西)

标签: javascript firebase google-cloud-firestore svelte


【解决方案1】:

如果您只需要一个唯一的随机 ID,我建议您使用 the UUID library (npm install uuid),特别是 UUID v4

那么你可以按如下方式使用它:

import { v4 as uuidv4 } from 'uuid';
...
db.collection('colname').add({ id: uuidv4(), text:'sometext' }).then(...);

生成的 ID 将是一个唯一的随机生成的字符串,格式为 '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'

【讨论】:

    【解决方案2】:

    add() 方法每次都会生成一个随机的文档 ID。如果您还想在文档数据中添加文档 ID,那么最好事先生成 ID,然后使用 set() 创建具有该 ID 的文档:

    const docId = db.collection('colname').doc().id
    
    db.collection('colname').doc(docId).set({ id: docId, text:'sometext' }).then(() => {
      console.log("Document added")
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 2019-06-15
      • 1970-01-01
      相关资源
      最近更新 更多