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 にシリアル化するジェネリック タイプのアイテムがあります。したがって、すべてのドキュメントはアイテム型です。しかし、それらは異なるプロパティを持つ異なるリストに由来するため、区別できるようにしたいと考えています。追加のプロパティで差別化を提案すると、これは完全に機能します。しかし、その後、すべてのリストのすべてのリスト アイテムが 1 つの大きな Items コレクションに表示されます... この問題に対する最善のアプローチは何だと思いますか? それともそれと一緒に暮らすだけですか?インデックスを使用して、アイテム内のすべてのデータから必要な実際のデータへの射影を作成したいと考えています。