私は、ユーザーが終日のギグを予約できる小さなサイトを構築しようとしています。meteor のアカウント パッケージを使用しており、以下を添付する予定です。
user.availability: [
{
status: n, //where n is 0-# of status types (5 atm) : single char rather than float
date: ddmmyyy, //string as well, no need for time as its day long
job_id: {Job}
}, ...
]
ジョブには、いつ、どこで、何を、といった情報しかありません。
ニュートラル、使用可能、明示的に使用不可、予約済み、保留の 5 つの状態があります。ユーザーは当然中立であり、利用可能性を明示的に述べる必要があります。最初の 3 つの状態 (n、a、u) から選択し、最大 2 週間先の可用性を設定することのみが許可されます。ジョブの「提供者」は、他の 2 つの可用性状態を設定するものです。私にとってニュートラルな状態とは、db (user.availability 配列) にレコードが必要ないことを意味します。
このスタイルは、次のクエリに適しています。
db.users.find({ availability: { status: 'a', date: { $in: search_dates_array }});
また、ユーザーがサイトにログイン/アクセスすると、現在の日付より前の日付の可用性設定を消去できます。非アクティブなユーザーは、はるかに長い間隔でプルーニングされます。
このソリューションは、保存する情報が最小限であり、特定のイベントによってトリガーされるメンテナンスがほとんど必要なく、クエリが簡単であるという点で有益だと思います。しかし、これが mongodb の強みを活用する正しい方法であるかどうかは 100% 確信が持てません。これについて何か助けていただければ幸いです。誰かが mongodb スキーマの最適化に関する (比較的) 簡単に消化できる記事を教えてくれれば、それは素晴らしいことです。
ありがとうございました。