MongoDB - нереляционная база данных. нет соединений, нет строк, нет столбцов. Это на основе документов.
MySQL - это реляционная база данных.
Например: у нас есть несколько серверов. У каждого сервера есть имя, IP-адрес, администраторы и ОС. Но некоторые серверы имеют дополнительные данные «мастер».
Если is_slave == true: вывести имя главного сервера.
В MongoDB (без индекса; здесь это не актуально):
{
"_id": ObjectId("4da5609a7650bf3f57000000"),
"name": "Testarossa",
"ip": "0.0.0.0",
"admins": [
{ "username": "yitsushi", "has_sudo": true },
{ "username": "lokko", "has_sudo": false }
],
"os_name": "Gentoo",
"is_slave": false
},
{
"_id": ObjectId("4decc3d1f2d26f6716000001"),
"name": "Amanuat",
"ip": "0.0.0.1",
"admins": [
{ "username": "yitsushi", "has_sudo": false },
{ "username": "parandokht", "has_sudo": true }
],
"os_name": "Ubuntu 10.10",
"is_slave": true,
"master": {
"name": "Testarossa",
"server": {
"$ref": "servers",
"$id": ObjectId("4da5609a7650bf3f57000000");
}
}
}
Вы можете видеть, что главное поле не требуется, поэтому вам не нужно определять его в каждом документе вместо значений null
/ 0
. И вы можете определить массив (администраторы) вместо связанных таблиц. В главном поле: мы определяем объект с двумя свойствами: имя (для печатного имени сервера) и ссылка (мы можем создать ссылку с помощью doc['master']['server']['$id']
или с помощью другого запроса получить полный документ главного сервера) .
В MySQL нам нужны серверы, администраторы и таблица server_admins (минимум) и некоторые ненужные поля, значение которых null
.
MongoDB и MySQL - это не одна и та же категория. MongoDB - нереляционная, MySQL - реляционная база данных. Для MongoDB или MySQL нужна совершенно другая логика и отношение.
Идеальная таблица сравнения: MongoDB, CouchDB, MySQL Grid сравнения на www.mongodb.org