RavenDB - где условие на включенном объекте - PullRequest
2 голосов
/ 06 марта 2012

Позволяет иметь эти объекты:

public class Obj1
{
    public string Id { get; set; }
}

public class Obj2
{
    public string Id { get; set; }
    public string Obj1Id { get; set; }
}

public class Obj3
{
    public string Id { get; set; }
    public string Obj2Id { get; set; }
}

Я использую, например, так:

var objs3 = session.Query<Obj3>()
    .Customize(x => x.Include<Obj3>(o3 => o3.Obj2Id))
    .Take(1000)
    .ToList();
foreach (var obj3 in objs3)
{
    var obj2 = session.Load<Obj2>(obj3.Obj2Id);
    //do something with it
}

Мой вопрос, есть ли возможность добавить к запросу что-то вроде .Where (o2 => o2.Obj1Id == "some / Id")?Query ничего не знает об Obj2 на стороне клиента (Linq), но серверная часть работает с ними, потому что это делает только один запрос к БД.

Я пытаюсь посмотреть, как работают индексы и проекции, но безуспешнос некоторыми конструкциями.Возможно, мое мнение искажено из реляционных баз данных, и есть другие решения, которые требуют переопределения моих структур ...

Мое другое решение - добавить Obj1Id в Obj3, но это создаст дубликаты (я могу жить сthis;))

Некоторая дополнительная информация для объектов:
- Obj1 уникален для каждого клиента, поэтому существует около 200 документов
- Obj2: Obj3 - это братья и сестры 1: 1, каждый со своей точкойсвойств просмотра, около 100.000 для каждого клиентаВключая Obj1 внутри Включая Obj2?(это я не буду использовать, это просто вопрос)

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Нет, вы не можете добавить условие для включения.Это либо полностью, либо совсем нет.

0 голосов
/ 07 марта 2012

Как сказал Орен, у вас есть условие во включенном состоянии.Таким образом, вы можете либо реструктурировать свои данные, либо использовать индекс мультикарты (и, возможно, также уменьшить), если у Obj2 и Obj3 есть что-то общее, например, идентификатор Obj1.

Какой способ лучше в вашем случае на самом делезависит от типа имеющихся у вас данных, здесь нет общего ответа.(Возможно, вы можете опубликовать другой, более конкретный вопрос с реальными именами классов вместо абстрактных имен, таких как Obj1-3).

...