【发布时间】:2016-02-03 21:48:35
【问题描述】:
我是 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 中以正确的方式实现这一点吗?
【问题讨论】:
-
并不是说我对莱诺阿多·迪卡普里奥有任何反对 =)
标签: ravendb