在前端访问Firestore ID生成器

时间:2019-06-13 06:35:04

标签: javascript firebase google-cloud-firestore

我想在文档set的同时在前端设置我的文档ID,所以我想知道是否有一种生成Firestore ID的方法,看起来像这样:

const theID = firebase.firestore().generateID() // something like this

firebase.firestore().collection('posts').doc(theID).set({
    id: theID,
    ...otherData
})

我可以使用uuid或其他一些ID生成器软件包,但是我正在寻找Firestore ID生成器。 This SO answer指向某些newId method,但是我在JS SDK中找不到它...(https://www.npmjs.com/package/firebase

3 个答案:

答案 0 :(得分:2)

import {randomBytes} from 'crypto';

export function autoId(): string {
  const chars =
    'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  let autoId = '';
  while (autoId.length < 20) {
    const bytes = randomBytes(40);
    bytes.forEach(b => {
      // Length of `chars` is 62. We only take bytes between 0 and 62*4-1
      // (both inclusive). The value is then evenly mapped to indices of `char`
      // via a modulo operation.
      const maxValue = 62 * 4 - 1;
      if (autoId.length < 20 && b <= maxValue) {
        autoId += chars.charAt(b % 62);
      }
    });
  }
  return autoId;
}

来自Firestore Node.js SDK: https://github.com/googleapis/nodejs-firestore/blob/4f4574afaa8cf817d06b5965492791c2eff01ed5/dev/src/util.ts#L52

答案 1 :(得分:0)

您要添加具有唯一ID的新文档吗?

请参见https://firebase.google.com/docs/firestore/manage-data/add-data#add_a_document

  

有时文档没有有意义的ID,让Cloud Firestore为您自动生成ID更方便。您可以通过调用add()

     

在某些情况下,使用自动生成的ID创建文档参考,然后在以后使用该参考可能会很有用。对于此用例,您可以调用doc()

     

.add(...)和.doc()。set(...)在后台完全等效,因此您可以使用更方便的任何一个。

add()

    // 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);
    });test.firestore.js

doc()

    // Add a new document with a generated id.
    var newCityRef = db.collection("cities").doc();
    // later...
    newCityRef.set(data);

答案 2 :(得分:0)

在RN Firebase不和谐聊天中询问后,我被指示到react-native-firebase库中的this util function。它与我在问题中提到的SO答案所引用的功能基本上相同(请参阅firebase-js-sdk here中的代码)。

根据您在Firebase上使用的包装,ID生成util不一定是可导出/可访问的。所以我只是将其复制为我的项目中的util函数:

export const firestoreAutoId = (): string => {
  const CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'

  let autoId = ''

  for (let i = 0; i < 20; i++) {
    autoId += CHARS.charAt(
      Math.floor(Math.random() * CHARS.length)
    )
  }
  return autoId
}

对不起,对于较晚的答复:/希望这会有所帮助!