【问题标题】:RavenDB: Raven Query not returning correct count with document authorizationRavenDB:Raven 查询未返回正确的文档授权计数
【发布时间】:2014-07-01 21:46:01
【问题描述】:
  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 分页网格中显示所有引擎。我需要知道要显示的记录总数计算并显示页数(页数是固定的)。

【问题讨论】:

标签: statistics authorization ravendb where-clause


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢菲茨查克。我同意。但授权不适用于命令 session.Query().Count()。当我为特定用户设置授权时,预计会计算满足授权的所有文档的计数,而不是使用该模型获取数据库中的所有文档计数。
【解决方案2】:

您看到的是 Raven 的 QueryStatistics 忽略了授权包。这个has been reported in the Raven Google Group

据我所知,在撰写本文时,还没有可靠的方法来获取查询的授权文档总数。在我看来,授权包应该包括一些对此的支持。

当我发现更多信息时,我会调查并更新这个答案。

【讨论】:

  • 有关于获取授权文件数量的消息吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多