如何将我的文档参考 ID 添加到 IdCrucero

问题描述 投票:0回答:1

我一直在尝试将新项目添加到我的“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;
        }
      }
}
angular firebase ionic-framework google-cloud-firestore
1个回答
0
投票
仅在成功添加您提供的数据后

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);

    

© www.soinside.com 2019 - 2024. All rights reserved.