如何从Firebase角度查询嵌套子级?

时间:2019-11-12 12:59:33

标签: javascript angular firebase google-cloud-firestore

//现在我的数据库结构

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
}
}
}

1 个答案:

答案 0 :(得分:0)

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

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

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

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

因此,您将最终得到一个字段(例如rcv.users),其中保留了有关接收用户的所有详细信息,而最后一个字段(例如,rcv.ids)中仅保留了他们的ID,然后用于查询。