🤢
Firestoreの検索で条件分岐っぽいことする
結論
query変数に追加し続ける。
let query = firebase.firestore().collection('users').doc(id)
if (select) {
query = query.where('select', '==', select)
}
if (limit) {
query = query.limit(limit)
}
query.get()
実装例
api.ts
import firebase from 'firebase/app';
import 'firebase/firestore';
import { UserDocumentType } from '@/types/firestore.d.ts';
const fetchUsers = async (payload: {
ids?: string[];
group?: string;
limit?: number;
}) => {
const { ids, group, limit = 50} = payload;
let query = firebase.firestore().collection('users');
if (ids && ids.length > 0) {
if (ids.length > 10) {
// TODO: 10件を超える配列はfirestoreが非対応なのでバッチ処理の関数を作る
return;
}
// 複数のドキュメントID指定で検索(最大10件)
query = query.where(
firebase.firestore.FieldPath.documentId(),
'in',
ids
)
}
if (group) {
query = query.where('group', '==', group)
}
const usersData = await query
.limit(limit)
.get()
.then((querySnapshot) => {
return querySnapshot.docs.map((doc) => {
const data = doc.data() as UserDocumentType;
data.id = doc.id;
return data
})
})
.catch((err) => throw err);
return usersData;
}
export { fetchUsers }
Discussion