【问题标题】:How can i get the doc inside doc from collection firebase?如何从 collection firebase 获取 doc 中的 doc?
【发布时间】:2020-12-09 00:11:50
【问题描述】:

嗨! 如何获取“ListaFavorite”中的文档?

我可以获取除此列表之外的所有其他文档,我只获取 [object object] ,它需要再次管道文档或者我不知道。

这是我使用的:

fav-page.html

 <ion-col *ngFor="let fav of this.favItems | async">        
          <ion-card>
            {{ fav.ListaFavorite}}
          </ion-card>
</ion-col>

更新:

async addFavorites(
    uniqID: string,
    favorite_title: string,
    favorite_description: string,
    favorite_image: string,
    favorite_tag: string,
    favorite_stoc: boolean,
    favorite_reducere: number,
    favorite_price: number,
    favorite_userId: string
  ): Promise<void> {
    this.MyUser = firebase.auth().currentUser;
    const { uid } = this.MyUser;

    const favoriteObj = {};
    favoriteObj[uniqID] = {
      favorite_title: favorite_title,
      favorite_description: favorite_description,
      favorite_image: favorite_image,
      favorite_tag: favorite_tag,
      favorite_stoc: favorite_stoc,
      favorite_reducere: favorite_reducere,
      favorite_price: favorite_price,
      favorite_userId: favorite_userId,
      isFavorite: true,
    };

 this.favItems = this.firestore
      .collection<User>("users", (ref) => ref.where("uid", "==", `${uid}`))
      .snapshotChanges()
      .pipe(
        map((actions) =>
          actions.map((a) => {
            const data = a.payload.doc.data() as User;
            const id = a.payload.doc.id;

            return { id, ...data };
          })
        )
      );

}

这样我可以获得对象的唯一ID,所以我可以简单地做: console.log(this.favItems.ListaFavorite[uniqID].favorite_description);

但我收到此错误:

TypeError: Cannot read property 'bayonete-QSrpS5021' of undefined

问题是..我已经在 firebase 中拥有该产品,但找不到字段?

下一步是什么? xd

【问题讨论】:

    标签: angular typescript firebase google-cloud-firestore


    【解决方案1】:

    ListaFavorite 是地图类型字段。它包含其他地图,文档。在您的代码中,您应该将其视为具有属性的普通 JavaScript 对象,其名称与您在控制台中看到的相同。您需要知道该映射中嵌套字段的名称才能使用它们。例如:

    fav.ListaFavorite['bayonete-XXXX'].favorite_description
    

    如果您不知道地图中的名称,您将很难弄清楚如何找到嵌套值。

    【讨论】:

    • 感谢先生的帮助!我更新了我的问题,即使我输入了正确的 ID,我仍然无法获得我想要的字段..
    • 错误消息现在告诉您this.favItems.ListaFavorite 未定义。我不认为this.favItems 包含您认为的内容。
    • 我明白了。我试过这个'console.log(data.ListaFavorite[bayonete162bcaca].favorite_description); ` 我设法得到了这个字段,但我在管道函数中使用了它。我想我越来越近了
    【解决方案2】:

    您好,我终于找到了解决问题的方法。 所以基本上,我只是在我的函数中声明了属性,然后我很容易通过这样的属性在 html 中调用它们:

    checkFavorite() {
        this.MyUser = firebase.auth().currentUser;
    
        const { uid } = this.MyUser;
        const data = this.MyUser.email;
        const myDoc = { uid };
    
       this.favItems = this.firestore
          .collection<User>("users", (ref) => ref.where("uid", "==", `${uid}`))
          .snapshotChanges()
          .pipe(
            map((actions) =>
              actions.map((a) => {
                const data = a.payload.doc.data() as User;
    
                return {
                  id: a.payload.doc.id,
                  Title: a.payload.doc.data().ListaFavorite[`bayonete162bcaca`].favorite_title,
                  Description: a.payload.doc.data().ListaFavorite[`bayonete162bcaca`].favorite_description,
                };
              })
            )
          );
      }
    

    在 HTML 中:

      <ion-col size-lg="6" size-md="6" size-sm="6" size-xs="12" *ngFor="let fav of this.favItems | async">
              <ion-card>
                {{  fav.Title }}
              </ion-card>
      </ion-col>
    

    【讨论】:

      猜你喜欢
      • 2018-09-17
      • 2019-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多