首页 文章

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

提问于
浏览
2

我有一个包含文档集合的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 <MyDocument,MyDocument>的实现如何?

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

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

并且不应该有Reduce部分吗?

你可能已经注意到了,我对这个Map / Reduce概念很新:-) .

1 回答

  • 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();
    

相关问题