RavenDb:查找演员X未出演的电影

RavenDb:查找演员X未出演的电影,ravendb,Ravendb,我是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 cla

我是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; }
}

有人知道如何在RavenDb以正确的方式实现这一点吗

使用我博客文章中描述的方法:

您可以使用Actorid数组创建索引:

public class Movies_ByActor : AbstractIndexCreationTask<Movie>
{
    public Movies_ByActor()
    {
        Map = movies => from s in movies
                        select new
                        {
                            Actors = s.Actors.Select(x => x.ActorId)
                        };
    }

    public class ActorsInMovie
    {
        public object[] Actors { get; set; }
    }
}
公共类电影\u演员:AbstractIndexCreationTask
{
公共电影
{
Map=电影=>来自电影中的
选择新的
{
Actors=s.Actors.Select(x=>x.ActorId)
};
}
公共类ActorsInMovie
{
公共对象[]参与者{get;set;}
}
}
然后,您可以搜索电影中不包含所需演员的位置:

var result = session.Query<Movies_ByActor.ActorsInMovie, Movies_ByActor>()
                    .Where(x => x.Actors != (object)"actors/1")
                    .As<Movie>();
var result=session.Query()
其中(x=>x.Actors!=(对象)“Actors/1”)
.As();
由于我们查询的对象与结果不同,我们需要将
指定为
,以告诉RavenDB实际返回的对象的类型


工作示例:

并不是说我对Lenoardo DiCaprio有任何反对意见(a,谢谢=)这很有效,并帮助我理解了更多。只是,我必须将查询的.Where部分更改为:x=>!x、 Actors.Contains((对象)“Actors/1”))
System.InvalidOperationException: Cannot process negated Any(), see RavenDB-732 http://issues.hibernatingrhinos.com/issue/RavenDB-732
public class Movies_ByActor : AbstractIndexCreationTask<Movie>
{
    public Movies_ByActor()
    {
        Map = movies => from s in movies
                        select new
                        {
                            Actors = s.Actors.Select(x => x.ActorId)
                        };
    }

    public class ActorsInMovie
    {
        public object[] Actors { get; set; }
    }
}
var result = session.Query<Movies_ByActor.ActorsInMovie, Movies_ByActor>()
                    .Where(x => x.Actors != (object)"actors/1")
                    .As<Movie>();