0

私は自分のプロジェクトの1つにJavaでmongodbを使用しています。ユーザーは、jsonファイルにあることがわかっている時間を入力しようとしています。私がやりたいのは、その時間を含むドキュメントを検索し、そのドキュメントから次のLoginRequestドキュメントまで、すべてのドキュメントを出力として生成することです。

    For example:
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113ca"}, "LoginRequest" : { "Time" : "11-06-2012 11:59:33", "innerAttr4" : "innerValue4"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cc"}, "LoginResponse" : { "innerAttr1" : "innerValue1", "innerAttr4" : "innerValue4"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cb"}, "OtherRequest" : { "innerAttr3" : "innerValue3"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cd"}, "OtherResponse" : { "innerAttr2" : "innerValue2", "innerAttr4" : "innerValue4"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113ce"}, "LoginRequest" : { "Time" : "11-06-2012 12:34:05", "innerAttr4" : "innerValue4"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cf"}, "LoginResponse" : { "innerAttr1" : "innerValue1", "innerAttr4" : "innerValue4"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cg"}, "OtherRequest" : { "innerAttr3" : "innerValue3"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113ci"}, "LoginRequest" : { "Time" : "11-06-2012 14:59:33", "innerAttr4" : "innerValue4"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cm"}, "LoginResponse" : { "innerAttr1" : "innerValue1", "innerAttr4" : "innerValue4"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cj"}, "OtherRequest" : { "innerAttr3" : "innerValue3"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cs"}, "OtherResponse" : { "innerAttr2" : "innerValue2", "innerAttr4" : "innerValue4"} }

ここで、ユーザーが「11-06-201212:34:05」として時間を入力するとします。したがって、これの出力は次のようになります。

Output:
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113ce"}, "LoginRequest" : { "Time" : "11-06-2012 12:34:05", "innerAttr4" : "innerValue4"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cf"}, "LoginResponse" : { "innerAttr1" : "innerValue1", "innerAttr4" : "innerValue4"} }
    { "_id" : { "$oid" : "4ceb753a70fdf877ef5113cg"}, "OtherRequest" : { "innerAttr3" : "innerValue3"} }

出力として取得することはでき{ "_id" : { "$oid" : "4ceb753a70fdf877ef5113ce"}, "LoginRequest" : { "Time" : "11-06-2012 12:34:05", "innerAttr4" : "innerValue4"} }ますが、上記のように出力したいと思います。

4

1 に答える 1

2

LoginResponse または OtherResponse ドキュメントに、それらを先行する LoginRequest に関連付ける何も保存していません。したがって、現在のスキーマでは、次の LoginRequest まで、LoginRequest に続いて他のすべてのドキュメントを返すクエリを作成することはできません。

アプリケーションの目的とアーキテクチャの詳細を知らなければ、決定的な解決策を提供することは困難です。ただし、いくつかの提案があります。

(a) LoginRequest だけでなく、すべてのドキュメントにタイムスタンプを保存します。したがって、LoginRequest が与えられた場合、次の LoginRequest を見つけ (時間順にクエリを実行)、2 つの LoginRequest のタイムスタンプの間にあるタイムスタンプを持つ他のすべてのドキュメントを検索できます。

(b) アプリケーション アーキテクチャで許可されている場合は、LoginRequest の ID をそれに続く LoginResponse および OtherRequest ドキュメントに保存します (次の LoginRequest まで)。

(c) LoginRequest、LoginResponse、および OtherRequest の個別のドキュメントを保存しないでください。代わりに、特定のログインのすべての対話のコレクションに 1 つのドキュメントを保存します。次に、そのすべての情報を取得するための単純な単一のクエリになります。

于 2012-06-13T08:28:12.483 に答える