私はRavenDbを初めて使用し、次の問題が発生しました。これはSQLデータベースでは非常に簡単に解決できますが、RavenDbではそれほど簡単ではありません(そうです)。
私のクラスを考えると:
//document collection
public class Movie
{
public string Id { get; set; }
public string Title { get; set; }
public List<MovieActor> Actors { get; set; }
}
public class MovieActor
{
public string ActorId { get; set; }
public string CharacterName { get; set; }
public DateTime FirstAppearance { get; set; }
}
//document collection
public class Actor
{
public string Id { get; set; }
public string Name { get; set; }
}
レオナルドディカプリオが演じているすべての映画を見つけるのは、次のマップインデックスを使用すると、非常に簡単で効率的です。
public class Movies_ByActor : AbstractIndexCreationTask<Movie>
{
public Movies_ByActor()
{
Map = movies => from movie in movies
from actor in movie.Actors
select new
{
MovieId = movie.Id,
ActorId = actor.ActorId
};
}
}
しかし、これは私が達成したいことではありません、私は反対を望んでいます...レオナルドディカプリオが演じていないすべての映画を見つけるために。
また、次のクエリを試しました。
var leonardoActorId = "actor/1";
var movies = from movie in RavenSession.Query<Movie>()
where !movie.Actors.Any(a => a.ActorId.Equals(leonardoActorId))
select movie;
しかし、これは私に例外を与えるだけです:
System.InvalidOperationException: Cannot process negated Any(), see RavenDB-732 http://issues.hibernatingrhinos.com/issue/RavenDB-732
RavenDbでこれを適切な方法で実現する方法を知っている人はいますか?