Nancy と RavenDB を使用してフォト ギャラリーを構築しています。次のようなモデル クラスがあります。
[JsonObject(IsReference=true)]
public class Album
{
public Album()
{
this.Photos = new List<Photo>();
this.Tags = new List<String>();
}
public String Id {get; set;}
public String Name {get; set;}
public String Path {get; set;}
public DateTime ModifiedDate{get; set;}
public IList<String> Tags {get; set;}
public IList<Photo> Photos {get; set;}
}
public class Photo
{
public String Id {get; set;}
public String Name {get; set;}
public String Path {get; set;}
public IList<String> Tags {get; set;}
public Album Album {get; set;}
public DateTime ModifiedDate{get; set;}
public bool IsPrivate{get; set;}
}
そして、マップの私の試みは、写真 - >タグのインデックスを減らします:
public class TaggedPhotosIndex:AbstractIndexCreationTask<Album, TaggedPhotos>
{
public TaggedPhotosIndex()
{
Map = albums =>
from a in albums
from p in a.Photos
from t in p.Tags
select new TaggedPhotos
{
Tag = t,
PhotoIds = new List<String> {p.Id}
};
Reduce = results =>
from result in results
group result by result.Tag into agg
select new TaggedPhotos
{
Tag = agg.Key,
PhotoIds = agg.SelectMany(a => a.PhotoIds).ToList()
};
}
}
public class TaggedPhotos
{
public String Tag {get; set;}
public IList<String> PhotoIds {get; set;}
}
これが私が達成したいことです:
タグの配列を指定して、一致するタグが少なくとも 1 つあるすべての Photo オブジェクトを取得したいと考えています。
RavenDB は、クエリで SelectMany を許可しておらず、アイデアがありません。
解決策を見つけました (クライアント api を使用して ravendb の selectmany にLuceneQuery @ Workaround を使用) が、他の代替手段を楽しみにしています。