2013-03-12 72 views
3
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; } 
    } 

//以下是使用上述模型的代码。我有17000个文档与此模型RavenDB:Raven查询没有返回文件授权的正确计数

 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,这是忽略了我在之前的语句设置的授权。如果我在上面的语句中添加where子句,它正在工作,我可以看到正确的计数。但我想获得用户授权的所有文档。

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

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

RavenQueryStatistics queryStats; 
    query.Statistics(out queryStats); 


    queryStats.TotalResults 

试过我仍然无法得到结果授权。我明白了所有的数字。

请你帮我找出查询结果的TotalCount而不加载所有记录吗?

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

+0

如果考虑[跳过的结果](http://ravendb.net/docs/faq/skipped-results),你会得到正确的结果吗?另请参见[跳过结果的分页](http://ravendb.net/docs/client-api/querying/paging) – 2013-03-12 11:10:09

回答

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

谢谢Fitzchak。我同意。但授权不适用于命令会话。查询().Count()。当我为特定用户设置授权时,需要计算授权满足的所有文档的计数,而不是使用该模型将所有文档计入数据库中。 – user2159798 2013-03-12 09:51:55

0

你所看到的是Raven的QueryStatistics忽略授权捆绑。这has been reported in the Raven Google Group

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

我会研究它并更新这个答案,因为我发现更多。

+0

获得授权文件数量的任何消息? – 2014-06-14 12:31:45