Что такое запрос драйвера Morphia или Java в отношении один ко многим? - PullRequest
1 голос
/ 05 июля 2011

Предположим, у меня есть пользовательская коллекция и дочерняя коллекция.

Предположим, у меня есть определенный пользователь, и у дочерних элементов (которые являются многими сторонами пользователя) есть статус поля типа string.Я хочу найти этого ребенка в пользователе, где status = "active".

Будет ли запрос другим, если только один ребенок в пользователе может иметь статус = "active" в любое время, хотя ни один из детей не может иметьстатус, равный «активный»?

Дочерние объекты не встроены, но ссылка для пользователя.

Это мое решение, но оно не выглядит для меня очень эффективным;

for (c : user.children) {
      if (c.status == "active") {
        child = c
      }
    }

1 Ответ

0 голосов
/ 17 января 2012

Для прямого поиска в БД добавьте поле «parentId» в класс «Дети»:

public class Children {
  public String status;
  public ObjectId parentId; // point to the parent of this child
}

Тогда вот путь:

Если вы используете чистую морфию:

Datastore ds = ...;
Children activeChild = ds.find(Children.class).filter("status", "active").filter("parentId", user.getId()).get();

Если вы используете Play! Framework с модулем PlayMorphia:

Children activeChild = Children.find("status,parentId", "active", user.getId()).get();
...