То, что вы хотели бы сделать, это выполнить несколько OR
операций, что является одним из ограничений firebase (angularfire - просто оболочка для firebase), как указано в документации :
Ограничения запросов:
Логические OR
запросы. В этом случае вы должны создать отдельный запрос для каждого условия OR
и объединить результаты запроса в вашем приложении.
Поэтому я предлагаю вам выполнить все запросы для каждого имени пользователя параллельно, используя forkJoin
.
Пример:
userNames = ['name1', 'name2', 'name3'];
const reqs = this.userNames.map(x => this.afs.collection<Post>('data', ref => ref.where('userName', '==', x)).valueChanges());
this.posts = forkJoin(...reqs).pipe(
map(val => {
return val.map((data, i, arr) => {
return { userName: this.userNames[i], posts: data };
});
})
);
Теперь у вас получился наблюдаемый массив, который выглядит следующим образом:
[
{
userName: 'name1',
posts: [/** data from db here **/]
},
// ....
]
Вы можете изменить желаемую структуру внутри map
к выбору вы хотите, чтобы данные были структурированы.