0

RavenDB は初めてで、Raven DB ドキュメントがあります。

Student
{
  Id : int
  Subjects : List<int>
}

ID 1 の学生と ID 2 の学生の科目の交差を取得するクエリを作成しようとしています

{
  ID : 1
  Subjects : {22, 23, 25}
}

{
  ID : 2
  Subjects : {22, 25 }
}

これらの交差点は {22,25} になります。この場合、交差点サブジェクト 2 の数も必要です。

このタイプのクエリにアプローチする最善の方法は何ですか? この種のクエリをより適切に処理する NoSQL ソリューションは他にありますか? また、生徒のコレクションをメモリにキャッシュしようとしています。

シャーディングをサポートするデータベースが必要です。また、1,500 万のドキュメントのデータセットがあります (Raven や Mongo などのデータベース ソリューションを使用して、異なるマシン間でそれらをシャーディングできます)。これを db レベルで行う必要があり、RavenDB のドキュメントで db レベルでこれを行う方法を見つけることができませんでした。

4

1 に答える 1

1

コメント (元の質問ではありません) に基づいて、次のクエリを実行できます。

var q = session.Query<Student>()
               .Where(x => x.Subjects.Any(y => y == 22))
               .Intersect()
               .Where(x => x.Subjects.Any(y => y == 25));

同等の Lucene クエリは次のようになります。

Subjects:22 INTERSECT Subjects:25

このデータを考えると:

Student { Id = 1, Subjects = new List<int> { 22, 23, 25 } }
Student { Id = 2, Subjects = new List<int> { 22, 25 } }
Student { Id = 3, Subjects = new List<int> { 23, 25} }
Student { Id = 4, Subjects = new List<int> { 22 } }

3 と 4 には両方の値がないため、学生 1 と 2 のみが返されます。

交差クエリの詳細については、ドキュメントを参照してください。

于 2013-03-20T00:06:13.250 に答える