我想在文档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)
答案 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 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
// 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
}
对不起,对于较晚的答复:/希望这会有所帮助!