2013-03-12 70 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