我一直在尝试将新项目添加到我的“Cruceros”集合中,并且我希望将 firestore 文档 uid 作为该项目的 id,但它始终为空,我不知道为什么会发生这种情况以及何时 console.log显示“this.idCrucero”它显示了我想要的内容,但它不在 firebase 集合中,这是我的代码:
import { inject, Injectable } from "@angular/core";
import { addDoc, collection, doc, Firestore, getDoc, getDocs, orderBy, query, setDoc } from "@angular/fire/firestore";
@Injectable({
providedIn: 'root',
})
export class CrucerosService {
private firestore = inject(Firestore);
public idCrucero: string = "";
async guardarCrucero(
idCrucero: any,
name: any,
subtitle: any,
imagenCrucero: any,
descripcion: any,
imagenDescripcion: any,
tituloQueHacer: any[],
imagenQueHacer: any[],
descripcionQueHacer: any[],
tituloCamarotes: any[],
descripcionCamarotes: any[],
imagenCamarotes: any[],
planos: any[],
lugares: any[],
precioLugares: any[],
puertos: any[]
) {
const obj ={
"idCrucero" : idCrucero,
"name" : name,
"subtitle" : subtitle,
"imagenCrucero" : imagenCrucero,
"descripcion" : descripcion,
"imagenDescripcion" : imagenDescripcion,
"tituloQueHacer" : tituloQueHacer,
"imagenQueHacer" : imagenQueHacer,
"descripcionQueHacer" : descripcionQueHacer,
"tituloCamarotes" : tituloCamarotes,
"descripcionCamarotes" : descripcionCamarotes,
"imagenCamarotes" : imagenCamarotes,
"planos" : planos,
"lugares": lugares,
"precioLugares": precioLugares,
"puertos": puertos
};
const Ref = collection(this.firestore, 'Cruceros');
const docRef = await addDoc(Ref, obj);
this.idCrucero = docRef.id;
console.log(this.idCrucero)
}
async obtenerCruceros(){
const Ref = collection(this.firestore, 'Cruceros');
const q = query(Ref, orderBy('name'));
const querySnapshot = await getDocs(q);
const cruceros = querySnapshot.docs.map(doc => ({ id:doc.id, ...doc.data()}));
return cruceros
}
async actualizarCrucero(id: string, formData: any) {
const cruceroRef = doc(this.firestore, 'Cruceros', id.toString());
await setDoc(cruceroRef, formData, { merge: true });
}
async obtenerCruceroPorId(id: string) {
const Ref = doc(this.firestore, 'Cruceros', id);
const docSnap = await getDoc(Ref);
if (docSnap.exists()) {
return docSnap.data();
} else {
console.log("No such document!");
return null;
}
}
}
addDoc
才会为您提供文档ID。 如果您希望将文档 ID 添加到新文档中,则必须在使用 setDoc
而不是使用 addDoc
写入文档之前生成 ID。 (要么这样,要么在创建文档后使用 ID 更新文档。)您可以生成随机文档 ID,而无需使用不带路径参数的 doc()
编写文档。然后您可以使用它来构建对要创建的新文档的引用:
const id = doc(this.firestore).id;
const docRef = doc(this.firestore, 'Cruceros', id);
obj.idCrucero = id
await setDoc(docRef, obj);