如何创建返回输入文档类型的索引?

时间:2011-12-15 08:57:52

标签: c# mapreduce ravendb

我有一个包含文档集的Raven数据库。我想检索该集合中的一部分文档。仅检索满足特定标准的文档。但是,对于检索到的每个文档,必须检索整个文档。

考虑以下文档类型:

public class MyDocument {
    public string Id { get; set; }

    public string Name { get; set; }
    public int Foo { get; set; }
    public string Bar { get; set; }
}

假设我想检索Foo属性大于给定值的所有文档(在编译/索引创建时未知)。使用动态索引,可以这样做:

IList<MyDocument> FindMyDocuments(int minFooValue) {
    using(IDocumentSession session = _store.OpenSession()) {
        return session.Query<MyDocument>().Where(d => d.Foo > minFooValue).ToList();
    }
}

但是,据我了解,使用预定义索引而不是动态索引会有好处。所以我想预先为这个操作定义一个索引。 如何实现AbstractIndexCreationTask&lt; MyDocument,MyDocument&gt;看起来像?

以下似乎不起作用,因为Raven希望Map选择一个新的匿名类型:

class MyDocumentIndex: AbstractIndexCreationTask<MyDocument, MyDocument> {
    public MyDocumentIndex() {
        Map = docs => from doc from docs
                      select doc;
    }
}

并且不应该有Reduce部分吗?

正如您可能已经注意到的那样,我对这个Map / Reduce概念很陌生: - )。

1 个答案:

答案 0 :(得分:0)

大卫 你这样做:

public class MyDocumentIndex: AbstractIndexCreationTask<MyDocument> {
    public MyDocumentIndex() {
        Map = docs => from doc from docs
                      select new { doc.Foo };
    }
}

然后你用:

查询它
session.Query<MyDocument, MyDocumentIndex().Query(x=>x.Foo > minValue).ToArray();