0

// 我现在的数据库结构

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

这就是我查询以获取它工作的数据的方式。

//服务.ts

getAlbumByUserId(userId) { 

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

//组件.ts

this.service.getAlbumByUserId(this.userId);

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

// 数据库结构

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

1 回答 1

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,并用于查询。

于 2019-11-12T14:14:58.407 回答