「photos」というキーを持つドキュメント「user」があります。以下は、保存される文字列の配列、つまり「写真」ドキュメントのIDです。
この「写真」フィールドで「ユーザー」を照会したい:「写真」プロパティにこのIDを持つすべてのユーザーが必要です。
これはファイヤーストアを通じて可能ですか?
.where()で使用する 'array-contains'クエリ演算子を追加して、配列フィールドに特定の要素が含まれるドキュメントを検索します。
https://firebase.google.com/support/release-notes/js 5.3.0
更新:@google-cloud/firestore
でも利用可能: https://github.com/googleapis/nodejs-firestore/releases/tag /v0.16.
更新2https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html
更新3がAdmin Node.js SDK v6.0.0で利用可能になりました https://github.com/firebase/firebase-admin-node/releases
Array Containsクエリを使用可能にしていないため、 Henryの答え を参照してください。
残念ながらまだロードマップには載っていませんが。
それまでは、代わりに次の形式のマップを使用する必要があります。
photos: {
id1: true
id2: true
}
これで、photos.id1 == true
でフィルタリングすることにより、id1を持つすべてのユーザーを見つけることができます。
Firebase documentation でそのようなセットのクエリについて詳しく読んでください。
Firestoreは、キーごとにインデックスを作成する必要があることで混乱しているように見えるため、答えを少し拡大します。
documentReference.where('param','==','value').onSnapshot(...)
ただし、これらのパラメーターのデータにインデックスを付けない限り、複合クエリを実行することはできません。したがって、次のようなことができるようにインデックスが必要になります。
documentReference.where('param','==','value').where(..otherparams...).onSnapshot(...)
したがって、IDの写真が必要な場合は、名前を付けて保存できます
usersCollection : (a collection)
uidA: (a document)
photoField: (a field value that is a map or object)
fieldID1 : true (a property of the photoField)
fieldID2 : true (a property of the photoField)
etc ...
また、photoFieldにfieldID1を持っているユーザーにクエリを実行するだけで、インデックスを作成したり、以下のようなクエリを実行したりする必要はありません。
firestore.doc('usersCollection/uidA').where('photoField.fieldID1','==',true).onSnapshot(...)