少し考えてください。私はあなたがそれを照会するいくつかの方法を持っているので、おそらくデータを非正規化するでしょう。回答を短くするために擬似コードを使用しています
今月のすべての日付と時間をユーザーに引き出します。
ここでの課題は、2つのつの子ノードで照会されます。そのうちの1つは特定のユーザーであり、もう1つは日付の範囲です。ソリューションは、uidとYYMM(年月)
の複合問合せは、ここでは構造ですされています
jobs
job_0
start: 170518090135
end: 170518170515
uid_yymm: uid_0_1705
uid: uid_0
company_id: company_0
comp_status: company_0_true
job_1
start: 1705190835
end: 17051910430
uid_yymm: uid_0_1705
uid: uid_1
company_id: company_0
comp_status: company_0_false
queryOrdered(byChild: "uid_yymm").queryEqual(to value: "uid_0_1705")
これは、今年は05
ている2017年と月であることをuid_0のための仕事のすべてを照会します
今同じ会社名および仕事を持っているすべてのユーザーに引いて(アウトフィールド クロックではいっぱいあるとフィールドクロックは空です)。
Noデータを検索すると、NoSQLの処理が複雑になる可能性があるため、完全に回避します。ここでも、複合クエリは、comp_statusノード上の上記の構造でジョブを実行します。
queryOrdered(byChild: "comp_status").queryEqual(to value: "company_0_true")
このクエリはclock_(真)であるcompany_0のために働くすべてのユーザーを返します。 uid_1の場合のように時計を消したときは、company_0_falseに設定します。
プルリストのすべてのユーザーのためにと 重複を削除しているすべての会社名(のみ 会社の名前でプロジェクトに別の子を作るために良いですか?)
これは少し曖昧ですが、私は答えがはい、別の会社名ノードを持っているが、ユーザーノードの会社への参照を保持すると思います。
Database
users
3iHTIn1MicMdPbgEV6nnMy5ijHq1
company: "company_0"
email: "[email protected]"
name: "Tom"
type: "Employee"
6889js9i99s9ksij8asd88as8d8
company: "company_1"
email: "[email protected]"
name: "bill"
type: "Employee"
companies
company_0
comp_name: "Electric Company"
company_1
comp_name: "Bad Company"
出典
2017-05-19 19:56:50
Jay
Firebase構造のスニペットをテキストとして、画像なしで含めてください。画像は検索可能ではなく、回答の一部として使用する必要がある場合、テキストは再タイピングの代わりにコピー/ペーストすることができます。また、リンクが途切れるのでリンクもしないでください。 – Jay
これらのクエリは、どちらの構造でも実行できます。追加の子ノードが2つ必要です。どちらの方法でも複合クエリを実行できます。クエリ#3は不明です。 – Jay
こんにちはジェイ、Firebaseの構造をテキストに更新しました。ありがとうございます! –