К сожалению, это немного сложнее, чем вы думаете.
Насколько я понимаю, сам Mongoid не поддерживает группирование и сложение в одном запросе, для этого вам нужно будет выполнить карту / уменьшитьнепосредственно с драйвером MongoDB.Я запустил этот пример с той же структурой данных, что и у вас, но при переводе может быть несколько ошибок, если у вас возникнут проблемы, дайте мне знать, и я постараюсь исправить это.
Сначала вам нужно определить свою карту и сократить функции.Они должны храниться в виде строк JavaScript.
map = "function(){ emit(new Date(this.created_at.getYear(), this.created_at.getMonth(), this.created_at.getDate()), {amount: this.amount}); };"
reduce = "function(key, values){ var sum = 0; values.forEach(function(doc){ sum += doc.amount; }); return {amount: sum};};"
Затем вы вызываете map_reduce
непосредственно в коллекции, в этом случае:
Conversion.collection.map_reduce(map, reduce).find.to_a
, которая возвращает массив хешей, напримерследующее:
[{"_id"=>Sat Dec 13 13:00:00 UTC 0110, "value"=>{"amount"=>55.0}}, {"_id"=>Sat Jan 17 13:00:00 UTC 0111, "value"=>{"amount"=>45.0}}]