сделать соединение, как SQL-сервер в MongoDB - PullRequest
0 голосов
/ 22 ноября 2011

Например, у нас есть две коллекции

users {userId, firstName, lastName}

votes {userId, voteDate}

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

Как мне написать запрос для получения данных из MongoDB?

Ответы [ 3 ]

2 голосов
/ 22 ноября 2011

Самый простой способ сделать это - кэшировать количество голосов для каждого пользователя в пользовательских документах.Затем вы можете получить ответ с помощью одного запроса.

Если вы не хотите этого делать, сопоставьте результаты в коллекцию результатов и запросите эту коллекцию.Затем вы можете запустить инкрементную карту-уменьшение, которая рассчитывает только новые голоса, чтобы поддерживать ваши результаты в актуальном состоянии: http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-IncrementalMapreduce

2 голосов
/ 23 ноября 2011

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

В этом случае я бы сохранил голосование как встроенный документ для пользователя.

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

0 голосов
/ 22 ноября 2011

Я не могу дать более полный ответ сейчас, но вы должны быть в состоянии достичь этого с помощью MapReduce.Шаг Map вернул бы userIds пользователей, которые имеют более 20 голосов, шаг сокращения вернул бы firstName и lastName, я думаю ... посмотрите здесь .

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