Я лично выполнить MapReduce на коллекции:
карта является простой функцией испуская поле «subida». Ключ должен совпадать, если вам нужна одна сумма; результат после уменьшения даст единственный объект {<key>: <sum>}
, с <key>
, независимо от того, какое значение вы поставили в испускании.
map = function() { emit(<key>, this.subida); }
уменьшают также простая функция их суммирования:
red = function(k, v) {
var i, sum = 0;
for (i in v) {
sum += v[i];
}
return sum;
}
Вы можете назвать MapReduce на вашей коллекции <mycollection>
:
res = db.<mycollection>.mapReduce(map, red);
который создаст временную новую коллекцию вы можете управлять как и любая другая коллекция. Значение, возвращаемое mapReduce, содержит несколько значений в отношении mapReduce, таких как время, статус ..., а также временные параметры. имя коллекции, созданное в поле «результат». Чтобы получить необходимые значения, вы должны запросить эту коллекцию:
db[res.result].find()
который должен дать вам объект {<key>: <sum>}
.
Если вы запустите MongoDB 1.7.4 или выше, вы можете сэкономить немного хлопот, задавая MongoDB возвращать результат напрямую, без создания коллекции:
db.<mycollection>.mapReduce(map, red, {out : {inline: 1}});
Большое спасибо, я могу, наконец, сделать этот запрос, отлично работает в оболочке mongo. Я был реализован в python в своем приложении ... Теперь я вижу, что mongodb map/reduce query не равны CouchDB карте/уменьшению запросов ... LOL: D – JAM
это запрос, реализованный в python http://pastebin.com/du8yrk3p: D – JAM
Просто интересно, почему вы выбрали mapreduce over aggregation? – UpTheCreek