我是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解决方案可以更好地处理这种查询吗?另外,我正在尝试将学生集合缓存在内存中。
我需要一个支持分片的数据库,而且我还有一个包含1500万个文档的数据集(我可以使用像Raven或Mongo这样的数据库解决方案在不同的机器上对它们进行分片)。我必须在db级别执行此操作,我在RavenDB文档中的db级别找不到任何如何执行此操作。
答案 0 :(得分: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 } }
只有学生1和2将被退回,因为3和4都没有这两个值。
您可以在文档中阅读有关Intersection Queries的更多信息。