В соответствии с official document: обычно используется операция« ручной справочной информации », experienced guy even suggest never use DBref, а затем я серьезно отношусь к тому, сколько штрафов за производительность приходится выполнять дважды, когда я хотите запрашивать объекты с реляционным набором, особенно по сравнению с традиционной реляционной БД, - мы можем получить ожидаемый результат в одном запросе с помощью соединений таблицы.Монго «ручная справка» по сравнению с традиционным соединением таблицы «
Денормализовать пример:
db.blogs.insert({
_id: 1,
title: "Investigation on MongoDB",
content: "some investigation contents",
post_date: Date.now(),
permalink: "http://foo.bar/investigation_on_mongodb",
comments: [
{ content: "Gorgeous post!!!", nickname: "Scott", email: "[email protected]", timestamp: "1377742184305" },
{ content: "Splendid article!!!", nickname: "Guthrie", email: "[email protected]", timestamp: "1377742184305" }
]}
)
Мы можем просто использовать: db.blogs.find(), чтобы получить все, что мы хотим: блог с комментариями к ним принадлежат. Пример
Нормализовать:
db.books.insert({
_id: 1,
name: "MongoDB Applied Design Patterns",
price: 35,
rate: 5,
author: "Rick Copeland",
ISBN: "1449340040",
publisher_id: 1,
reviews: [
{ isUseful: true, content: "Cool book!", reviewer: "Dick", timestamp: "1377742184305" },
{ isUseful: true, content: "Cool book!", reviewer: "Xiaoshen", timestamp: "1377742184305" }
]
}
);
db.publishers.insert({
_id: 1,
name: "Packtpub INC",
address: "2nd Floor, Livery Place 35 Livery Street Birmingham",
telephone: "+44 0121 265 6484",
}
);
Теперь, если я хочу, чтобы получить полную информацию об одной книге, я должен вручную запрос дважды, аналогичный ниже:
> var book = db.books.find({ "name": { $regex: 'mongo*', $options: 'i' } })
> db.publishers.find({ _id: book.publisher_id })
Вещи, которые я знаю : операции с приоритетом будут выполняться Mongo «в памяти», но у меня будет сводный вопрос ниже:
Простыми словами: Документированная база данных защищает данные «denormalize» для получения результата в рамках одного запроса, однако, когда мы должны хранить реляционные данные, это «предлагает» вам использовать «ручную ссылку», что означает дважды запрос , тогда как в реляционной БД будет только один запрос времени, используя «соединение таблицы».
Это не имеет никакого смысла для меня :)