我有一个包含文档集的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概念很陌生: - )。
答案 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();