MongoDB встроенный документ - PullRequest
3 голосов
/ 13 сентября 2011

В JPA, использующем бэкэнд SQL, встроенные таблицы обновляются автоматически. Есть ли механизм в NoSQL (MongoDB) для достижения того же?
Вот пример того, чего я пытаюсь достичь:
Таблицы:

Student
Данные студента
@ OnetoMany
Детали курса (из другой таблицы курсов)

В JPA и SQL, если таблица сведений о курсе обновлена, изменения отражаются для всех студентов, ссылающихся на нее.

В MongoDB вместо использования объединений документ внедряется в него. Как мы решаем эту проблему в MongoDB?

Спасибо, Сэм

Ответы [ 2 ]

2 голосов
/ 13 сентября 2011

Короче, нет.Это также вопрос яблок и апельсинов.MongoDB - это замена SQL в самом широком смысле этого слова.Они обе базы данных.JPA - это слой ORM, который может поддерживать постоянные отношения 1: N и N: M.В настоящее время нет ни одного слоя MongoDB ORM, который реализует JPA или что-то похожее на него.

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

В этом случае вы хотите отдельный сбор сведений о курсеи сохраните массив значений _id этой детали курса в вашем студенческом документе.Таким образом, вы можете изменить эту коллекцию отдельно, не отслеживая мутации документов с подробностями курса.

Не используйте для этого ссылки DBRefs .DBRef не являются подходящим инструментом для ссылок на идентификаторы документов известного типа.Вместо этого используйте простые ссылки _id.

Итак, версия TL; DR:

  • Поместите документы с подробностями курса в отдельную коллекцию
  • Вложите только массив _id в курсподробные документы у вашего ученика

Пример:

db.students {
    _id: ..,
    name: Willy Wonka,
    courses: [..,..,..]
}

db.courses {
    _id: ..,
    course: "MongoDB for Dummies"
}
0 голосов
/ 13 сентября 2011

Вы можете использовать ссылку вместо встроенного документа. Затем есть только одна копия данных курса, и все студенты должны обращаться к одной и той же информации по определению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...