statistics - RavenDB:Raven Query 未返回具有文档授权的正确计数

标签 statistics authorization ravendb where-clause

  public class EngineInfo 
  {
    public int Id{get;set;}

    public int? AircraftId { get; set; }

    public string SerialNumber { get; set; }

    public int Position { get; set; }

    public string RegNumber { get; set; }
    }

//这是使用上述模型的代码。我有 17,000 个文档与此模型

       ravenSession.Store(new AuthorizationUser
        {
            Id = "Authorization/Users/1",
            Name = "user-1",
            Permissions =
                            {
                                new OperationPermission
                                    {
                                        Allow = true,
                                        Operation = "EngineInfos/View",
                                        Tags = "Company/100"
                                    }
                            }
        });

 1. var query = ravenSession.Query<EngineInfo>();    

//当我记录 query.Count() 时,我看到所有文档计数,即 17000,这忽略了我在 before 语句中设置的授权。如果我在上面的语句中添加 where 子句,它就可以工作,我可以看到正确的计数。但是我想获取用户有权访问的所有文档。

 2. var query = ravenSession.Query<EngineInfo>().ToList();

现在,考虑到授权,我得到了正确的计数。但问题是除非我提到 Take(x),否则它不会返回所有结果。 我试过

   RavenQueryStatistics queryStats;
    query.Statistics(out queryStats); 


   queryStats.TotalResults 

我仍然无法获得授权结果。我明白了。

你能帮我弄清楚在不加载所有记录的情况下找到查询结果的 TotalCount 吗?

我的要求是在可搜索的 ExtJS 分页网格中显示所有引擎。我需要知道要显示的记录总数计算并显示页数(页数是固定的)。

最佳答案

这是设计使然,请参阅 http://ravendb.net/docs/intro/safe-by-default .

session.Query<Post>().Count()将为您提供服务器上所有帖子的计数,而 session.Query<Post>().ToList().Count()将为客户端提供已获取的帖子数。

默认情况下,RavenDB 将 .Take(128) 应用于查询,以鼓励您进行分页并且默认情况下是安全的。如果你想得到更多,那么你需要指定要拿多少,比如 .Take(1024) , 但默认情况下,服务器不会一次返回超过 1024 个项目。您可以将服务器配置为执行此操作,但不建议这样做。您最好使用分页,因为无论如何用户都无法一次处理那么多信息。

关于statistics - RavenDB:Raven Query 未返回具有文档授权的正确计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15357057/

相关文章:

c# - 授权 - .net 核心中的声明集

javascript - NestJs 基于用户属性和策略的 CASL 授权守卫

jquery - Google Apps 脚本中 $.ajax() 的服务器端等效项是什么?

r - 如何使用 'sweep'函数

r - 预测模型提前一天预测 - 滑动窗口

python - 来自带有scipy的偏态分布的随机变量

python - Python 中的组合函数

asp.net-mvc-2 - RavenDB 中的 DocumentId 问题

c# - 如何禁用 RavenDB 复制

c# - 如果我已经创建了一个隐式类型转换运算符,我可以让 Raven DB 像序列化一个字符串那样序列化一个对象吗?