0

注: MongoDB を初めて使用します。

テクノロジー: php mongodb シナリオ:

データは、提供されたプログラムを保持すると想定されています。ドキュメントは次のようになります。

{
    LocationName: 'name of the location',
    LocationAddress: 'Main street., Popular City, PC',
    LocationManager: 'Mr. Manager',
    LocationPhone: '555 555 1212',
    Programs :
             [
                 {
                 ProgramName : 'Excellence Prgram',
                 ProgramStartDate : '12-05-2012',
                 ProgramEndDate : '3-15-2013'
                 },
                 {
                 ProgramName : 'Excellence Prgram for me',
                 ProgramStartDate : '1-05-2012',
                 ProgramEndDate : '2-15-2013'
                 },
                 {
                 ProgramName : 'Excellence Prgram for three',
                 ProgramStartDate : '1-05-2012',
                 ProgramEndDate : '4-15-2013'
                 }
             ]
}

質問:

  1. 開始日と終了日でクエリを実行するには、コレクションに対するクエリは何ですか?
  2. プログラムは終了日までに失効し、新しいプログラムが各ドキュメントに頻繁に追加されます。期限切れのプログラムをドキュメントに残しておくと、ある時点で非効率になると思います。期限切れのプログラムをアーカイブするにはどうすればよいですか?

前もって感謝します。

4

1 に答える 1

0

申し訳ありませんが、この種の回答は嫌いです。ドキュメントの保存方法を根本的に変更します。

ドキュメントを次のようにします。

 {
     _id : 1823098123908831809
     ProgramName : 'Excellence Prgram',
     ProgramStartDate : '12-05-2012',
     ProgramEndDate : '3-15-2013'
     Location : {
         LocationName: 'name of the location',
         LocationAddress: 'Main street., Popular City, PC',
         LocationManager: 'Mr. Manager',
         LocationPhone: '555 555 1212',
 }

ここで問題になるのは、アクティブなプログラムがある場所を照会することはできますが、ビジネス ルールを満たすプログラムだけを抽出するのは難しいということです。

この再編成により、ビジネス ルールを満たす日付を持つコレクション内のすべてのドキュメントに対して簡単なクエリを作成できます。

詳細を変更する場所はより複雑になりますが、これは実際にはマイナーな使用例です。アクティブなプログラムを頻繁に照会します。場所によって管理者が変わることはめったにありません。

これにより、履歴を維持することもできます。プログラムの関連する実行の場所情報のみを更新すると、2013 年 5 月のエクセレンス プログラムの実行がメイン ストリートの古い場所でマネージャー氏と共に行われたという記録が残ります (現在はフロント ストリートで開催されていますが、マネージャー夫人による)。

于 2013-05-31T20:12:19.053 に答える