我在 RavenDB 中有一个看起来像这样的文档:
{
"ItemId": 1,
"Title": "Villa
}
使用以下元数据:
Raven-Clr-Type: MyNamespace.Item, MyNamespace
Raven-Entity-Name: Doelkaarten
所以我用类型 MyNamespace.Item 进行序列化,但给它我自己的 Raven-Entity-Name,所以它有自己的集合。
在我的代码中,我定义了一个索引:
public class DoelkaartenIndex : AbstractIndexCreationTask<Item>
{
public DoelkaartenIndex()
{
// MetadataFor(doc)["Raven-Entity-Name"].ToString() == "Doelkaarten"
Map = items => from item in items
where MetadataFor(item)["Raven-Entity-Name"].ToString() == "Doelkaarten"
select new {Id = item.ItemId, Name = item.Title};
}
}
在索引中,它在“地图”字段中被翻译为:
docs.Items
.Where(item => item["@metadata"]["Raven-Entity-Name"].ToString() == "Doelkaarten")
.Select(item => new {Id = item.ItemId, Name = item.Title})
对索引的查询永远不会给出结果。
如果将 Maps 字段手动更改为下面的代码,则它可以工作...
from doc in docs
where doc["@metadata"]["Raven-Entity-Name"] == "Doelkaarten"
select new { Id = doc.ItemId, Name=doc.Title };
如何在代码中定义给出所需结果的索引?
使用的 RavenDB:RavenHQ,构建 #961
更新:
我正在做的事情如下:我想将 SharePoint 用作 CMS,并将 RavenDB 用作 SharePoint 列表数据的仅现成复制。我创建了一个从 SharePoint 列表同步到 RavenDB 的工具。我有一个从 SharePoint 列表项创建并序列化到 RavenDB 的通用类型 Item。所以我所有的文档都是 Item 类型的。但是它们来自具有不同属性的不同列表,所以我希望能够区分。您建议区分其他属性,这将非常有效。但随后我会在一个大的 Items 集合中看到所有列表中的所有列表项......你认为解决这个问题的最佳方法是什么?还是只是忍受它?我想使用索引来创建从项目中的所有数据到我需要的实际数据的投影。