我是 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 中以正确的方式实现这一目标?