🐕

Firestore: インデックス(複合,単一フィールド) #CollectionGroup

2024/07/01に公開
1

使ってみたいメソッド

QuerySnapshot.docChanges

https://firebase.google.com/docs/reference/js/firestore_.querysnapshot?hl=ja#querysnapshotdocchanges

最後のスナップショット以降のドキュメントの変更の配列を返します。これが最初のスナップショットである場合、すべてのドキュメントが「追加された」変更としてリストに表示されます。

CollectionGroup サンプルコード

firestore.js
export async function collectGroup(user) {
  const membersByUser = query(collectionGroup(db, 'members'), where('user_id', '==', user.id));
  const querySnapshot = await getDocs(membersByUser);
  querySnapshot.forEach((doc) => {
      console.log(doc.id, ' => ', doc.data());
  });
}

インデックス: 複合、単一フィールド

  • 実行後、consoleにでてきたURL叩いたら自動的にインデックス貼ってくれた:

  • でてきたデータ

余談

Firestore(['users']).fetch();

Firestore(['users'], [['height', '==', 170]]).fetch();
const users = await Firestore(['users'], [['email', '==', email]).fetch();

Firestore(['users', user.id]).fech();



// SWRのpathやTanstackQueryのkeyなど、fetchライブラリと相性が良いように、
// キャッシュのキーともなる文字列で。
Firestore(`/users/${user.id}/thumbnails`)
  .where(['height', '==', 170])
  .where(['weight', '==', 80])
  .fetch();

Discussion

llc_starhacksllc_starhacks

  // INFO: Collection.getSegmentsに移動済み
  x_getAlias() {
    // const members = this.__querySnapshot__.docs[0].ref.parent;
    // const list = members.parent;
    // const user = list.parent.parent;
    // return ['users', user.id, 'lists', list.id, 'members'];
    // ↓
    // const listId = this.__querySnapshot__.query._path.segments[3];
    // const userId = this.__querySnapshot__.query._path.segments[1];
    // return ['users', userId, 'lists', listId, 'members'];
    // ↓
    return this.__querySnapshot__.query._path.segments;
  }