2013-01-12 53 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在客户端运行?这是在文档? –