//现在我的数据库结构
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
}
}
}
答案 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,然后用于查询。