記事化するようなことでもありませんが、ま、メモということで。
SubCollectionにするか、別に分けたコレクションを作るかはいつも悩みます。
下記で試していることは3つ。
- サブコレクションの作成(コレクションとサブコレクションを新規に同時で作るような状況)
- コレクション取得時にサブコレクションがどう見えるか(見えない確認)
- GroupCollectionを利用した検索
いろいろな書き方はあるかと思うが一旦下記のようにした。
ECサイトとかで一人のユーザーが「一般ユーザー」、「ショップ運営者」、「管理者」とかの権限を持つような状況を想定(したが、あまりいいサンプルではない。別Collectionを用意したほうがいいかも)。
const admin = require('firebase-admin');
admin.initializeApp({
credential: admin.credential.cert('/path/to/key.json'),
databaseURL: 'https://xxxxxxxxxx.firebase.com',
});
const db = admin.firestore();
(async () => {
//サブコレクション作成
const docId = db.collection("users").doc().id;
await db.collection("users").doc(docId).set({ name: 'hoge' });
await db.collection("users").doc(docId).collection("shopInfo").doc(docId).set({ level: 'user', id:docId });
await db.collection("users").doc(docId).collection("adminInfo").doc(docId).set({ level: 'admin', id:docId });
//サブコレクション参照
const snapshots = await db.collection("users").doc(docId).collection("shopInfo").get();
snapshots.docs.map(doc => {
console.log(doc.data());
})
//CollectionGroup
const groupSnapshots = await db.collectionGroup("shopInfo").where('level','==','user').get();
groupSnapshots.docs.map(doc => {
console.log(doc.data());
})
})()