Отображение / уменьшение группировки MongoDB по внешнему ключу - PullRequest
0 голосов
/ 20 декабря 2011

Я нахожусь в процессе выбора базы данных для проекта и новичка в мире NoSQL.Я не уверен, что один из запросов, который мы запустим, может быть выполнен с использованием NoSQL.Я думаю, что мой разум пока не может выполнить запрос.:)

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

У меня есть две коллекции.Один для устройств, другой для сообщений.

[{
  deviceId: 1,
  uuid: "30be317c-e586-4448-8fed-1a9481710670"
}, {
  deviceId: 1,
  uuid: "9878917c-e586-4448-8fed-1a9481710670"
}, {
  deviceId: 3,
  uuid: "as2e317c-e586-9878-8fed-1a9481710670"
}]

[{
  uuid: "30be317c-e586-4448-8fed-1a9481710670",
  message: "Hello world",
}, {
  uuid: "9878917c-e586-4448-8fed-1a9481710670",
  message: "Bonjour monde",
}, {
  uuid: "as2e317c-e586-9878-8fed-1a9481710670",
  message: "Hola Mundo",
}]

Теперь я хочу выполнить команду map / redund и сгруппировать сообщения по их deviceId.В этом примере «Hello World» и «Bonjour Monde» должны быть сгруппированы с использованием одного и того же ключа.Я не могу придумать способ сгруппировать их в методе map ().

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

Ответы [ 2 ]

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

В MongoDB вы не можете этого сделать.

Я предлагаю вам вставить deviceId в документы сообщения.Тогда вы сможете группировать по этому полю.

0 голосов
/ 21 декабря 2011

в теории это выполнимо, если сделать какое-то соединение внутри функции карты. Вы можете использовать объект "db" и все связанные запросы, которые вы делаете в оболочке.

db.runCommand({mapReduce: "test", map: function(){var obj = db.test.findOne(); emit(obj._id, 1);}, reduce: function(key, vals){ return Array.sum(vals); }, out: "mrout" })

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

Предпочтительным подходом является добавление идентификатора устройства в документы сообщения.

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