での作業は、最近、私はFirebase
からFirestore
に自分のデータモデルを移動しました。すべてのコードが動作していますが、いくつかのデータを取得するためにネストされたクエリに関していくつかの醜い問題があります。ここでのポイントは次のとおりです。Firestore:ネストされた単一のクエリ
今のこの部分のための私のデータモデルは、(はい!もう信者/例を養う)次のようになります。
{
"Users": { //Collection
"UserId1" : { //Document
"Feed" : { //Subcollection of Id of posts from users this user Follow
"PostId1" : { //Document
"timeStamp" : "SomeDate"
},
"PostId2" : {
"timeStamp" : "SomeDate"
},
"PostId3" : {
"timeStamp" : "SomeDate"
}
}
//Some data
}
},
"Posts":{ //Collection
"PostId1":{ //Document
"Comments" :{ //Subcollection
"commentId" : { //Document
"authorId": "UserId1"
//comentsData
}
},
"Likes" : { //Subcollection
"UserId1" : { //Document
"liked" : true
}
}
}
}
}
[OK]を、今私の問題は、のためには、の記事を取得することです私は次のように照会するユーザーのフィード:
- が私のフィードからのタイムスタンプで最後のX文書の発注を取得
その後
私は、リストから検索された各ポストの単一のクエリを実行する必要があります。
workoutPostCol.document(postId)
は今、私は、各ポストのデータを持っているが、私は、ユーザー名、画像、ポイントを撮影したいと思います。 。など異なる
Document
である著者の、そう、再び私はポストuserSocial(userId).document(toId)
最後に、そして以下に重要なのリストで検索された各
authorId
のために別の単一のクエリを行う必要があり、私は私の場合は知っている必要があります現在のユーザーは既にその投稿を好きでしたが、私はすべてが動作しますが、Firestore
の価格は、データベースの呼び出しの数に依存していることを考えている各ポストのための単一のクエリを実行します(再び)と私のuserIdがposts/likes/{userId}
内にある場合は今のところ確認する必要がありますそれは私のデータモデルは、データベースのこの種の良くないだけということだと私は再び戻ったばかりFirebase
に通常SQL
に移動したりする必要がある場合、また、それは私のクエリは、より簡単なことはありませんので、私は知りません。
注:私はすべてが、より多くのより簡単に自分のユーザーまたはポスト文書内のArrayListのが好き、飼料などのこのサブコレクションを移動されることを知っているが、文書の制限が1メガバイトであり、この場合多くに成長する、それは将来クラッシュするだろう。一方でFirestore
doesntのは、サブ文書(まだ)クエリまたは複数whereEqualTo
を用いOR
句を可能にします。
Arraylists
を使用し、その
Collections
に
joins
と
queries
を作るために
ID's
関係のこの種を保存するための簡単な方法を探している問題を抱えているユーザーからの投稿をたくさん読みましたが、1メガバイトの制限は、それを制限
過ぎる。
誰かが私の心を明確にすることができ、または少なくとも私に新しい何かを教える、多分私のモデルはちょうどがらくたされ、これを実行するためのシンプルかつ最も簡単な方法があることを願っています。あるいは、私のモデルは非SQLデータベースでは不可能かもしれません。
は良い一日を、すべてありがとうございました。
私は 'events'部分が好きです。私は、通知が一度だけ送られるように制御するために、そのようなものを考えました。一方、私はすでにデータを非正規化すべきであることを見てきました(IDの代わりにusernameとphotoUrlを保存します)。ユーザーは名前や画像を変更しないことが多く、最終的には無限のネストされたクエリ投稿、コメント、好きなものなど... –
最後に私は、「フィード」のために、私が従う各ユーザの投稿への参照のリストにとどまるべきだと思います。すべてのIDが大量のクエリを作成するよりも簡単になり、フィードを確認したい毎回の各ユーザーの最後の投稿をすべて取得できます。 –
@FranciscoDurdinGarcia - 私がinstagramのAPIを提案したのは、 'events'メソッドを使用することによってそれらを軽く保つことができると信じているからです。あなたが従うユーザーによるすべての投稿のリストを保持することに関しては、それは逆のデータモデルを必要とするので、滑りやすい斜面です。あなたが私に従っていると言って、私は投稿をします。これにより、ユーザーにデータを書き込む必要があります。セキュリティをより複雑にすることを除いて、このソリューションでは、200kのフォロワーがあれば、私のユーザーは1人の投稿を200kの他のユーザーのプロフィールに書き込む必要があります。私はあなたの推定された規模に基づいてその部分を選んでいます。 – johnozbay