Har*_*ent 45 javascript firebase google-cloud-firestore
是否有机会使用自定义生成的id将文档添加到firestore集合,而不是firestore引擎生成的id.
在此先感谢您的回复.
Fin*_*rcy 92
要使用您需要使用的自定义ID .set,而不是.add
这将创建一个ID为"LA"的文档:
db.collection("cities").doc("LA").set({
name: "Los Angeles",
state: "CA",
country: "USA"
})
Run Code Online (Sandbox Code Playgroud)
这取自这里的官方文档
ten*_*shi 31
如果有人正在寻找版本 9,我会将其留在这里。
这是从文档中获取的。
import { doc, setDoc } from "firebase/firestore";
// Add a new document in collection "cities" with "LA" as id
await setDoc(doc(db, "cities", "LA"), {
name: "Los Angeles",
state: "CA",
country: "USA"
});
Run Code Online (Sandbox Code Playgroud)
哪里db:
const firebaseApp = initializeApp(firebaseConfig)
const db = getFirestore(firebaseApp)
Run Code Online (Sandbox Code Playgroud)
Dav*_*yen 10
为了扩展已接受的答案,如果您希望您的客户在推送到 Firestore 之前为文档生成一个随机 ID(假设在createId()AngularFire2 之外存在相同的功能)
const newId = db.createId();
db.collection("cities").doc(newId).set({
name: "Los Angeles",
state: "CA",
country: "USA"
})
Run Code Online (Sandbox Code Playgroud)
这对于将 ID 设置为另一个文档中的参考字段非常有用,甚至在 Firestore 保存任何内容之前也是如此。如果您不需要立即使用保存的对象,这不会让您等待 ID,从而加快进程。该set()调用现在与您可能在 Angular 中使用的管道异步
注意我没有放入id: newIdset 对象,因为默认情况下 Firestore 不会将 ID 保存为文档中的字段
this.afs.collection('[your collection]').doc('[your ID]').set([your document]);
Run Code Online (Sandbox Code Playgroud)
这是用数据创建文档的功能,您可以选择是否要自己生成ID或自动生成ID。如果在函数调用期间提供了 id,则将创建的文档将具有您提供的 id。
模块化 Firebase firestore 9.+
import { getFirestore, serverTimestamp, collection, doc, setDoc, addDoc } from 'firebase/firestore/lite'
async create(id = null, data) {
const collectionRef = collection(getFirestore(), this.collectionPath)
const dataToCreate = {
...data,
createTimestamp: serverTimestamp(),
updateTimestamp: serverTimestamp()
}
const createPromise =
id === null || id === undefined
? // Create doc with generated id
await addDoc(collectionRef, dataToCreate).then(d => d.id)
: // Create doc with custom id
await setDoc(doc(collectionRef, id), dataToCreate).then(() => id)
const docId = await createPromise
return {
id: docId,
...data,
createTimestamp: new Date(),
updateTimestamp: new Date()
}
}
Run Code Online (Sandbox Code Playgroud)
非模块化 Firebase firestore 具有相同的功能(<版本 9)
import { firebase } from '@firebase/app'
async create(data, id = null) {
const collectionRef = (await firestore()).collection(this.collectionPath)
const serverTimestamp = firebase.firestore.FieldValue.serverTimestamp()
const dataToCreate = {
...data,
createTimestamp: serverTimestamp,
updateTimestamp: serverTimestamp
}
const createPromise =
id === null || id === undefined
? // Create doc with generated id
collectionRef.add(dataToCreate).then(doc => doc.id)
: // Create doc with custom id
collectionRef
.doc(id)
.set(dataToCreate)
.then(() => id)
const docId = await createPromise
return {
id: docId,
...data,
createTimestamp: new Date(),
updateTimestamp: new Date()
}
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做
// Inject AngularFirestore as dependency
private angularFireStore: AngularFirestore // from from 'angularfire2/firestore'
// set user object to be added into the document
let user = {
id: this.angularFireStore.createId(),
name: 'new user'
...
}
// Then, finally add the created object to the firebase document
angularFireStore.collection('users').doc(user.id).set(user);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30949 次 |
| 最近记录: |