Многозначные отношения в MongoDB - PullRequest
0 голосов
/ 02 апреля 2019

Я новичок в базах данных MongoDB и NoSQL, и я пытаюсь выучить разные способы мышления, о которых все упоминают, когда дело доходит до NoSQL.

У меня типичная ситуация с отношениями "многие к одному" Пожалуйста, не говорите мне, что MongoDB не является реляционной базой данных, потому что я это уже знаю. Ключевой момент - реальность работает определенным образом, и мне нужно подать заявку, чтобы отразить ее. Реальный мир полон отношений, и если ваш ответ «выберите другую БД для вашего случая» , то я думаю, что команда MongoDB могла бы закрыть свой бизнес, потому что их продукт был бы совершенно бесполезным в таком случае.

Итак, давайте предположим типичное Сотрудник / Отдел отношение. Сотрудник связан с одним Отделом . Отдел может иметь ноль или несколько Сотрудников .

Предположим, супер простые модели:

public class Department {

    private String name;

   // something like...
   private List<Employee> employees;

}

public class Employee {

    private String name;

   // something like...
   private Department department;

}

Теперь в моем REST API мне нужно несколько довольно базовых функций:

  • получить список всех отделов
  • получить список всех сотрудников, но он должен содержать название отдела для каждого сотрудника
  • получить список сотрудников для выбранного отдела

Так как бы вы решили это с MongoDB? Я также использую Spring Boot с Spring Data, но я думаю, что это не имеет большого значения.

Я сталкивался с разными подходами, но все они мне кажутся очень плохими. Встраивание отдела внутри сотрудника сделает невозможным получение списка всех отделов или сотрудников одного отдела. Встраивание сотрудников в отдел сделает невозможным получение списка всех сотрудников. Использование @ DbRef будет имитировать отношение, но как тогда получить список сотрудников, включая названия отделов, без вызова REST API для каждого сотрудника?

В последнее время я прочитал довольно много учебных пособий, руководств и обсуждений StackOverflow, но я не нашел приемлемого ответа. Действительно ли возможно, что MongoDB не может решить такую ​​сверхпростую проблему? Это даже не проблема , это скорее стандарт - обычная ситуация в окружающем нас мире.

спасибо

1 Ответ

1 голос
/ 02 апреля 2019

Может быть, вы можете использовать простой departmentId (со значением идентификатора Mongo для отдела) в вашем документе Employee?

Таким образом, вы избегаете встроенный документ, и ваши варианты использования могут работать:

  1. Случай всех отделов - это просто находка в коллекции отделов.
  2. Все сотрудники - это находка в коллекции сотрудников, а затем на вашем сервере вам нужно позвонить в отделколлекция для всех отдельных идентификаторов отделов, существующих в сотрудниках.
  3. Все сотрудники для выбранного дела отдела являются идентификатором поиска по отделу в коллекции сотрудников.

Будет ли это работатьдля вас приемлемым образом?

...