Взаимосвязанные запросы MySQL, аналог в MongoDB - PullRequest
0 голосов
/ 10 марта 2011

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

Например, в MySQL есть две таблицы:

Пользователи:

CREATE TABLE `testdb`.`users` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 55 ) NOT NULL ,
`password` VARCHAR( 32 ) NOT NULL
) ENGINE = MYISAM

Правила:

CREATE TABLE `testdb`.`rules` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`uid` INT NOT NULL ,
`title` VARCHAR( 155 ) NOT NULL ,
`points` INT NOT NULL
) ENGINE = MYISAM 

Теперь, чтобы выбрать все «правила», принадлежащие конкретному пользователю, я могу сделать SQL-запрос:

SELECT r.`title`, r.`points` FROM `rules` r, `users` u WHERE r.`uid` = u.`id` AND u.`id` = '123'

Теперь я могуНе можете понять, как сделать то же самое в MongoDB, не могли бы вы объяснить и привести пример.

PS Я делаю реализацию в Python с помощью Pymongo PPS. Я также хотел увидеть альтернативные способы решения этой проблемы с помощью ORM mongoengine или mongokit.

Заранее спасибо:)

1 Ответ

2 голосов
/ 10 марта 2011

MongoDB не поддерживает соединения, в отличие от СУБД, как mysql. И это потому, что MongoDB не является реляционной базой данных. Поэтому моделирование данных в MongoDB таким же образом, как и в СУБД, обычно является плохой идеей - вам приходится проектировать свои схемы в совершенно ином мышлении.

В этом случае, например, в MongoDB вы можете иметь по 1 документу на пользователя, причем правила, принадлежащие каждому пользователю, вложены внутрь.

, например

{
    "ID" : 1,
    "name" : "John",
    "password" : "eek hope this is secure",
    "rules": [
        {
            "ID" : 1,
            "Title" : "Rule 1",
            "Points" : 100   
        },
        {
            "ID" : 2,
            "Title" : "Rule 2",
            "Points" : 200
        }
    ]
}

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

Хорошей отправной точкой является ссылка Mongodb.org на Дизайн схемы - то, о чем я говорю выше, - это встраивание объектов.

...