【问题标题】:RavenDB: Indexing documents from multiple collectionsRavenDB:从多个集合中索引文档
【发布时间】:2011-08-22 13:19:21
【问题描述】:

我有几个文档集合,有时需要将它们合并到一个索引中以进行报告。

此常见问题解答提供了在 Raven Studio 中编写此类索引的解决方案:http://ravendb.net/faq/indexing-across-entities

虽然我知道我不会得到完整的编译时检查,但我会尽量避免像这样完全未经检查的代码:

public class Assets_ById : AbstractIndexCreationTask
{
    public override IndexDefinition CreateIndexDefinition()
    {
        return new IndexDefinition
        {
            Map = @"from doc in docs
                    where doc[""@metadata""][""Raven-Entity-Name""] == ""Cars"" ||
                          doc[""@metadata""][""Raven-Entity-Name""] == ""Trains"" ||
                          doc[""@metadata""][""Raven-Entity-Name""] == ""Boats"" ||
                          doc[""@metadata""][""Raven-Entity-Name""] == ""Planes""
                    select new
                    {
                        Cost = doc.Cost,
                        Id = doc.Id,
                        Name = doc.Name,
                        Type = doc.Type,
                    };"
        }
    }
}

是否有类似于通用 AbstractIndexCreationTask<T> 的东西可以让我使用 lambda 表达式定义异构索引?

【问题讨论】:

标签: ravendb


【解决方案1】:

您可以像这样使用 WhereEntityIs(names):

from doc in docs.WhereEntityIs<Vehicle>("Cars", "Trains", "Boats", "Planes")
select new 
{
  doc.Cost,
  doc.Name,
  doc.Type
}

【讨论】:

  • 感谢您的提示。这肯定比上面的代码更干净。除非我遗漏了什么,否则这意味着我仍然必须继承 AbstractIndexCreationTask&lt;T&gt; 才能将 Map 和 Reduce 函数定义为表达式树。我不能这样做,因为AbstractIndexCreationTask&lt;T&gt; 只索引一个集合。
  • 可以继承AbstractIndexCreationTask
【解决方案2】:

看这里:https://groups.google.com/forum/#!topic/ravendb/9wvRY0OiGBs

基本上是同一个问题,简短的回答是:

“目前没有更好的选择,但将来会有”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多