Получение списка идентификаторов пользователей из вложенной коллекции в базе данных Firestore с использованием TypeScript (NestJs)
Я работаю над Firestore и структурой моей коллекции Firestore, как показано ниже:
Пользователи-> userId1 -> UserDetails -> User_Info -> Данные JSON
Пользователи-> userId2 -> UserDetails -> User_Info -> Данные JSON
Пользователи-> userId3 -> UserDetails -> User_Info -> Данные JSON.
Пользователи-> userId4 -> UserDetails -> User_Info -> Данные JSON.
Для лучшего понимания, пожалуйста, посмотрите на снимок ниже:
Теперь мне нужен запрос Firestore, чтобы получить список идентификаторов пользователей, у которых естьisCardOrdered
являетсяtrue
.
Результат должен быть:
[
"userId1",
"userId2",
"userId3",
"userId4"
]
Я делаю это, но не получаю правильного результата.
@Injectable()
export class UsersClient {
constructor(
@Inject(UsersClientDocument.collectionName)
private UsersCollection: CollectionReference<UsersClientDocument>,
) { }
async fetchByQuery(query) {
console.log('******************************');
const querySnapshot = await this.UsersCollection.where('cardInfo[0].isCardOrdered', '==', true).get();
querySnapshot.forEach((doc) => {
console.log(' **********fetchByQuery:',doc.id, ' => ', doc.data());
});
}
}
И я вызываю этот метод следующим образом:
const fireBaseUser: any = await this.UsersClient.fetchByQuery();
console.log('fireBaseUser:',fireBaseUser);
Запрос: Любая помощь будет оценена по достоинству. Спасибо
1 ответ
Похоже, твойcardInfo
представляет собой массив, и Firestore не поддерживает запрос элемента в массиве так, как вы пытаетесь здесь:
this.UsersCollection.where('cardInfo[0].isCardOrdered', '==', true).
Если вы хотите разрешить этот запрос, вам придется (также) сохранить это значение в поле, которое Firestore может запрашивать. Например, если вы добавите дополнительное поле верхнего уровняisCardZeroOrdered
, вы можете запросить это:
this.UsersCollection.where('isCardZeroOrdered', '==', true).
Вы также можете хранить информацию в поле карты , а не в массиве, что визуально будет очень похоже, но позволит вам выполнять запросы с помощью:
this.UsersCollection.where('cardInfo.zero.isCardOrdered', '==', true).