1
我在RavenDB的單個文檔中保存了一個類別層次結構。查詢RavenDB中的層次結構
"CategoryList": [
{
"$id": "1",
"Id": "Admin",
"Name": "Administration",
"ParentCategory": null,
"Subcategories": [
{
"$id": "2",
"Id": "Admin1",
"Name": "Administration 1",
"ParentCategory": {
"$ref": "1"
},
"Subcategories": []
},...
我可以成功地在C#中使用這兩個類
public class Categories
{
public string Id { get; set; }
public IEnumerable<Category> CategoryList{ get; set; }
}
[JsonObject(IsReference = true)]
public class Category
{
private readonly IList<Category> _subcategories;
public string Id { get; set; }
public string Name { get; set; }
public Category ParentCategory { get; set; }
public IEnumerable<Category> Subcategories
{
get { return _subcategories; }
}
public Category()
{
_subcategories = new List<Category>();
}
public void AddSubcategory(Category subcategory)
{
subcategory.ParentCategory = this;
_subcategories.Add(subcategory);
}
}
加載但現在我想查詢我的類別層次結構來獲取其ID的單一類別。我怎麼能這樣做?爲每個類別創建一個文檔會更好嗎?
感謝
UPDATE:
嗨,Ayende,
感謝您的答覆。我相信,在你的文章正在使用Hierarchy
方法的方式已經過時了,但我還是能找到新的版本...
閱讀本article後,我創建了一個索引返回所有類別:
public class CategoriesByIdIndex : AbstractIndexCreationTask<Categories, CategoriesByIdIndex.ReduceResult>
{
public class ReduceResult
{
public string Id { get; set; }
public Category Category { get; set; }
}
public CategoriesByIdIndex()
{
Map = categoriesCollection => from categories in categoriesCollection
from category in categories.CategoryList
from subcategory in category.Hierarchy(x => x.Subcategories)
select new
{
subcategory.Id,
Category = subcategory
};
Store(x => x.Id, FieldStorage.Yes);
Store(x => x.Category, FieldStorage.Yes);
}
}
當我做這個查詢,所有類別返回:
var allCategories = session.Query<Categories, CategoriesByIdIndex>()
.AsProjection<CategoriesByIdIndex.ReduceResult>()
.ToList();
但是當我試圖通過一個類別編號進行篩選,我收到一個空列表:
var singleCategory = session.Query<Categories, CategoriesByIdIndex>()
.AsProjection<CategoriesByIdIndex.ReduceResult>()
.Where(x => x.Id == "Admin1")
.ToList();
我在做什麼錯?
感謝