【问题标题】:How to Query a nested child from firebase angular?如何从firebase角度查询嵌套的孩子?
【发布时间】:2019-11-12 12:59:33
【问题描述】:

// 我现在的数据库结构

rcv : { 
visible: 'all', 
ids: [ 
[0] : userId, 
[1] : user2Id ]
 }

这就是我查询数据的方式。

//service.ts

getAlbumByUserId(userId) { 

    return this.afs.collection('albums', ref => ref.where('rcv.visible', '==', 'all').where('rcv.ids', 'array-contains', userId)).valueChanges();
     }

//component.ts

this.service.getAlbumByUserId(this.userId);

但我想设置这样的结构,但我不知道如何在 firebase 中查询嵌套对象

//数据库结构

rcv : { 
visible: 'all',
 ids: {
 userId: {
id: userId
}
user2Id: {
id: user2Id
}
}
}

【问题讨论】:

    标签: javascript angular firebase google-cloud-firestore


    【解决方案1】:

    您正在寻找array-contains 运算符,它可以检查作为数组的字段是否包含特定值。

    您已经使用了正确的array-contains 运算符,但语法不正确。 array-contains 操作符检查你的数组中是否有任何元素与你传入的值完全相同。所以你需要传入数组中存在的完整值:

    ref.where('rcv.visible', '==', 'all').where('rcv.ids', 'array-contains', { id: userId })
    

    当您向数组添加更多数据时,为查询重现整个数组元素可能变得不可行。在这种情况下,常见的方法是添加一个额外的字段,您只保留 ID。

    因此,您最终会得到一个字段(例如 rcv.users),其中保存有关接收用户的所有详细信息,以及一个字段(例如 rcv.ids),您只保存他们的 ID,并用于查询.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-23
      • 2021-04-22
      • 1970-01-01
      • 2016-12-11
      • 2018-01-25
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      相关资源
      最近更新 更多