如何在根文档中提取集合的属性

时间:2012-01-13 00:45:10

标签: ravendb

我正在使用RavenDB,但我无法使用Lucene Query提取特定值。

以下是我的文档中的JSON:

{
 "customer" : "my customer"
 "locations": [
    {
      "name": "vel arcu. Curabitur",
      "settings": {
         "enabled": true
      }
    }
  ]
}

这是我的问题:

var list = session.Advanced.LuceneQuery<ExpandoObject>()
   .SelectFields<ExpandoObject>("customer", "locations;settings.enabled", "locations;name")
   .ToList();

列表已填充并包含一堆具有客户属性的ExpandoObjects,但我不能为我的生活获取位置 - &gt;名称或位置 - &gt;设置 - &gt;能够回来。

是“;”要么 ”。”用法不正确?

2 个答案:

答案 0 :(得分:1)

您似乎在RavenDB中误解了索引和查询的概念。在RavenDB中加载文档时,总是加载整个文档,包括它包含的所有内容。因此,在您的情况下,如果您加载了一个客户,那么您已经加载了该集合及其所有子项。这意味着,您可以使用标准的linq-to-objects来提取所有这些值,这里不需要任何特殊的索引或lucene。

如果要在数据库端进行此提取,以便可以查询这些属性,则需要索引。索引是使用linq编写的,但了解它们在服务器上运行并提取一些数据以填充lucene索引非常重要。但在这里,在大多数情况下,您甚至不必自己编写索引,因为RavenDB可以自动为您创建索引。

我不是这样,你需要编写像问题中那样的lucene查询,因​​为在RavenDB中lucene查询将始终针对预建索引执行,而这些查询通常是平的。但同样,你可能不需要用lucene做任何事情来获得你想要的东西。

我希望这对你有意义。如果没有,请更新您的问题,并告诉我们您实际想做的更多信息。

答案 1 :(得分:0)

从技术上讲,您可以使用逗号运算符“,”嵌套到集合中。 这应该有效,但不建议这样做。您可以获得整个对象并使用它,它更容易,更快。