2013-01-12 160 views
2

我需要檢索出現在數據庫中的所有RavenDB集合名稱。有沒有辦法做到這一點?怎麼樣?如何從RavenDB數據庫獲取所有實體名稱(集合名稱)?

+0

你嘗試過在自己的盧卡斯是什麼類型的網絡搜索。 。? – MethodMan

+0

這裏是一個很好的開始盧卡斯開始閱讀位於這裏的文檔[新手指南RavenDB](http://www.w3enterprises.com/articles/beginner-guide-to-ravendb.aspx) – MethodMan

+0

我試圖用Map創建索引docs => doc fromselect new { Name = MetadataFor(doc).Value (「Raven-Entity-Name」) };和我執行了一個LINQ搜索選擇,但沒有工作:(我甚至不知道這是否是正確的方式 –

回答

6

如果你使用過工作室在所有,你會看到它創建了一個名爲Raven/DocumentsByEntityName的索引。如果你不使用的工作室,或者你想確保它的存在,你可以建立它自己:

documentStore.ExecuteIndex(new RavenDocumentsByEntityName()); 

是烏鴉工作室建立它的路「收藏」列表是通過獲取Tag條款來自此索引的字段。你可以做同樣的事情:(如果您預計超過1024種不同的實體類型出於某種原因,然後進行分頁)

var results = documentStore.DatabaseCommands 
          .GetTerms("Raven/DocumentsByEntityName", "Tag", "", 1024); 

+0

對不起,我無法更快地做到這一點。希望這可以幫助! –

+0

非常感謝您的回答! –

2

最後,我通過嘗試使用我以前學過的知識獲取瞭解決方案。我想給廣告的人廣告,只有當我受到試探者的困擾時纔會來到這裏。

public string[] getCollectionNames() 
     { 
      using (var session = this.store.OpenSession()) 
      { 
       return session.Advanced.LuceneQuery<dynamic>() 
          .SelectFields<dynamic>("@metadata") 
          .Select<dynamic, string>(x => x["@metadata"]["Raven-Entity-Name"]) 
          .Distinct() 
          .ToArray(); 

      } 
     } 
+0

唯一的問題是'Distinct'運行客戶端。所以在得到你想要的結果之前,你必須返回大量的超額數據。 –

+1

實際上,Distinct運行服務器端。至少當你使用Linq API來做到這一點的時候。 使用Lucene API,這確實在運行客戶端。 但這不起作用,而其他選項更好 –

+0

這個工程。就像你所說的那樣,這個選項並不好。但它工作,因爲我測試。我如何知道LuceneQuery Distinct在客戶端運行?這是在文檔? –

相關問題