给定一个这样的记分板:即(允许相同的分数和用户)
user | score | date
user1 | 1000 | 10-05-2012
user1 | 999 | 10-05-2012
user2 | 998 | 10-05-2012
user1 | 998 | 10-05-2012
user4 | 987 | 10-05-2012
我想查询文档中的特定分数并获得低于和高于 x 个结果
例如,假设我想定位得分为 998 的用户 2,并获得上面 2 个和下面 2 个
日期在那里,但不影响查询,当有新分数出现并且存在相同值时,它会包含在下面。
最好的方法是什么?
目前我正在做最糟糕的事情,那就是进行三个查询:一个查询获取我正在寻找的分数,然后另外两个查询获取上方和下方的一些行。 我看过一些关于 GG 的讨论但我无法做出任何有意义的工作,希望在这里发布问题可以
更新:discussion group 上也有此线程但似乎也没有解决它。
谢谢
最佳答案
缪, 您实际上没有选择,您可以将其分为两个查询:
var q1 = session.Query<Score>().Where(x=>x.Value >= 998).OrderBy(x=> x.Value).Take(3).ToList();
var q2 = session.Query<Score>().Where(x=>x.Value < 998).OrderByDescending(x=> x.Value).Take(3).ToList();
您可以通过使用惰性查询来改进:
var q1 = session.Query<Score>().Where(x=>x.Value >= 998).OrderBy(x=> x.Value).Take(3).Lazily();
var q2 = session.Query<Score>().Where(x=>x.Value < 998).OrderByDescending(x=> x.Value).Take(3).Lazily();
现在,两个查询都将在单个请求中针对数据库发出。
关于RavenDB 查询记分牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11153538/