MySQL в MongoDB - PullRequest
       5

MySQL в MongoDB

1 голос
/ 09 декабря 2011

У меня есть этот запрос:

        SELECT DISTINCT 1 as table_id, users.id, users.username, a.titles_name title1, b.titles_name as title2, contacts.accepted
        FROM users
        LEFT JOIN contacts ON users.id = contacts.contact_id
        LEFT JOIN titles as a ON a.id = users.title_1
        LEFT JOIN titles as b ON b.id = users.title_2
        WHERE contacts.request_id = ' + $this->session->userdata('user_id') . '
        UNION DISTINCT
        SELECT DISTINCT 2 as table_id, users.id, users.username, a.titles_name title1, b.titles_name as title2, contacts.accepted
        FROM users
        LEFT JOIN contacts ON users.id = contacts.request_id
        LEFT JOIN titles as a ON a.id = users.title_1
        LEFT JOIN titles as b ON b.id = users.title_2
        WHERE contact_id = ' . $this->session->userdata('user_id')

Можно ли сделать что-то подобное в mongodb?

Ответы [ 3 ]

2 голосов
/ 09 декабря 2011

Честно говоря, вы захотите сделать что-то по-другому в монго, чем в реляционной БД. Вы не можете сделать прямой перевод из Mongo DB в MySQL, так как в Mysql просто нет смысла структурировать ваши данные в MongoDB.

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

При прямом ответе, да, вы можете сделать ссылку клиентом, но нет прямой концепции присоединения.

1 голос
/ 09 декабря 2011

Позволяет разбить компоненты запроса:

SELECT DISTINCT 1 as table_id, users.id, users.username, a.titles_name title1, b.titles_name as title2, contacts.accepted
FROM users

Да, это просто отдельный запрос, запрашивающий подмножество полей. Монго делает это.

LEFT JOIN contacts ON users.id = contacts.contact_id
LEFT JOIN titles as a ON a.id = users.title_1
LEFT JOIN titles as b ON b.id = users.title_2
WHERE contacts.request_id = ' + $this->session->userdata('user_id') . '

Это соединение, которое вы не можете сделать в монго. Однако вы можете отменить нормализацию, чтобы она стала ненужной, или выполнить аналогичное объединение данных на стороне клиента.

UNION DISTINCT
SELECT DISTINCT 2 as table_id, users.id, users.username, a.titles_name title1, b.titles_name as title2, contacts.accepted
FROM users
LEFT JOIN contacts ON users.id = contacts.request_id
LEFT JOIN titles as a ON a.id = users.title_1
LEFT JOIN titles as b ON b.id = users.title_2
WHERE contact_id = ' . $this->session->userdata('user_id')

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

TLDNR: Нет, вы не можете выполнить этот точный запрос в mongodb, но вы можете достичь того же результата.

1 голос
/ 09 декабря 2011

Да и нет.

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

Нет, потому что MongoDB не имеет понятия "объединения" записей из разных коллекций на самом сервере.

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