以下のコードで a/b
ドキュメント以下のcollectionGroup
だけを取得できるみたいです。
(a/b/c/d/${collectionGroup}
なども取得されるみたいです。)
firestore
.collectionGroup(collectionGroup)
.where(FieldPath.documentId(), '>=', `a/b`)
.where(FieldPath.documentId(), '<=', 'a/b0')
.get();
調べた経緯
この動画の 37:20 あたりの質問への回答として上記の方法が話されていました。
上記の方法を使ったコードがどこかに書いてあった、と話されていたので、調べた所、以下が見つかりました。
このコメントのリンク先が以下です。
リンク先の関連部分のコードを抜粋します:
const docPaths = [
`a/a/${collectionGroup}/cg-doc1`,
`a/b/a/b/${collectionGroup}/cg-doc2`,
`a/b/${collectionGroup}/cg-doc3`,
`a/b/c/d/${collectionGroup}/cg-doc4`,
`a/c/${collectionGroup}/cg-doc5`,
`${collectionGroup}/cg-doc6`,
`a/b/nope/nope`,
];
// ...
let querySnapshot = await firestore
.collectionGroup(collectionGroup)
.where(FieldPath.documentId(), '>=', `a/b`)
.where(FieldPath.documentId(), '<=', 'a/b0')
.get();
expect(querySnapshot.docs.map(d => d.id)).to.deep.equal([
'cg-doc2',
'cg-doc3',
'cg-doc4',
]);
余談:「collectionGroup 親ドキュメント 指定」でググったときに出て欲しかったので、タイトルに「親ドキュメント」って入れました。