代码之家  ›  专栏  ›  技术社区  ›  Paco Zevallos

ID动态文档firestore

  •  1
  • Paco Zevallos  · 技术社区  · 7 年前

    如何在firestore中创建此文档的ID QEoevSjHlswgk44nVTsr 动态的,也就是说,根据集合中的id进行更改?我用的是angularfire2:^5.0.0-rc.11

    这就是我所拥有的:

    firebase.service.ts公司

    proyectos: Observable<Proyecto[]>;
    
    getImagenDestacada() {
        this.proyectos = this.afs.collection('proyectos').doc('QEoevSjHlswgk44nVTsr').collection('archivos', ref => ref
        .orderBy('nombre','asc').limit(1)
        ).snapshotChanges().pipe(map(actions => {
          return actions.map(a => {
            const data = a.payload.doc.data() as Proyecto;
            const id = a.payload.doc.id; 
            return { id, ...data };
          });
        }));
        return this.proyectos
        }
    

    ========================

    我试过以下方法:

    firebase.service.ts公司

    getImagenDestacada(id:string) {
    this.proyectos = this.afs.collection('proyectos').doc(id).collection('archivos', ref => ref
    .orderBy('nombre','asc').limit(1)
    ).snapshotChanges().pipe(map(actions => {
      return actions.map(a => {
        const data = a.payload.doc.data() as Proyecto;
        const id = a.payload.doc.id; 
        return { id, ...data };
      });
    }));
    return this.proyectos
    }
    

    portafolio.组件.ts

    archivos: Observable<Proyecto[]>;
    
    this.archivos = this.fs.getImagenDestacada(this.id);
    

    但我得到了以下错误:

    1 回复  |  直到 7 年前
        1
  •  0
  •   Akshay    7 年前

    试试这个:const id=a.payload.doc.id.toString();

        2
  •  0
  •   kris    6 年前

    错误是因为当你打电话

    this.proyectos = this.afs.collection('proyectos').doc(id).collection ...
    

    id this.id 在调用方中未定义。

    根据 the Firebase documentation ,如果需要动态生成的id,则只需将参数留空即可,即将该行更改为:

    this.proyectos = this.afs.collection('proyectos').doc().collection ...
    

    然后Firebase将为您生成一个ID。

    另一方面,如果您希望记录有一个特定的ID,则需要一些代码来获取该ID并将其传递给 getImagenDestacada 功能而不是 .