2012-07-22 125 views
1

我有以下代碼RavenDb查詢字符串返回意想不到的結果

 IDocumentSession documentSession = store.OpenSession(); 
     var schools = documentSession.Query<School>().Where(x => x.SchoolName == "My Primary School").ToList(); 
     foreach (var school in schools) 
     { 
      Console.WriteLine(school); 
     } 

     schools = documentSession.Query<School>().Where(x => x.Id == "109940").ToList(); 
     foreach (var school in schools) 
     { 
      Console.WriteLine(school.SchoolName); // returns My Primary School 
     } 

當第一個查詢運行,沒有記錄返回,雖然我在數據庫中有匹配記錄。然而第二個查詢返回我期待的記錄。我運行數據庫作爲嵌入式,我還沒有設置任何索引我自己

更新:所以如果我自定義查詢等待非陳舊的結果它工作正常,我需要創建一個永久索引?

回答

1

這就是RavenDB的行爲。如果沒有索引來滿足您的查詢,RavenDB將在查詢時動態創建一個索引,並返回一個陳舊的結果。

這就是您第二次得到預期結果的原因。這是RavenDB的關鍵設計之一,讓索引在後臺執行工作,並允許陳舊的結果,而不是阻止查詢,直到索引不陳舊。

在生產過程中,一旦RavenDB檢測到該索引有正常使用,臨時索引將被提升爲自動索引。除了在自動索引上進行中繼之外,您還可以在某個時刻創建靜態索引。

+0

謝謝,我創建了一個索引並修正了結果,我認爲Raven會在首次使用時創建索引,然後返回結果,顯然情況並非如此。令人驚訝的是,如果我使用開始,一些記錄被返回,但其他人沒有回來 – 2012-07-23 10:16:24

相關問題