RavenDB:Raven Query没有通过文档授权返回正确的计数

时间:2013-03-12 09:05:55

标签: 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分页网格中显示所有引擎。我需要知道要显示的记录的总数和计算并显示页数(页数是固定的)。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

你看到的是Raven的QueryStatistics忽略了Authorization包。这has been reported in the Raven Google Group

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

我会调查并更新这个答案,因为我发现了更多。