Прежде чем я начну, я хочу сказать, что никаких других ответов на подобные вопросы применительно к этому вопросу не было. Сначала рассмотрим следующую JSON кодСовокупность сумм для MongoDB через NodeJS
"_id": "1412302013-01-20,11:32:22"
"display": [
{
"Name": "LOG-11-05-SH-O1.mp4",
"Type": "Startup",
"Count": 2,
"Detail": [
{
"Start": "2013-01-20,11:32:22",
"End": "2013-01-20,11:32:30"
},
{
"Start": "2013-01-20,11:32:22",
"End": "2013-01-20,11:32:30"
}
]
},
{
"Name": "PUR-12-47-SH-X3.mp4",
"Type": "Movie",
"Count": "2",
"Detail": [
{
"Start": "2013-01-20,11:32:22",
"End": "2013-01-20,11:32:30"
},
{
"Start": "2013-01-20,11:32:22",
"End": "2013-01-20,11:32:30"
}
]
},
Идентификатор в основном сочетание ряда номерного знака concatted с отметкой времени. То, что я пытаюсь сделать, это суммировать сумму для "Count"
, где "Name": "LOG-11-05-SH-O1.mp4"
.
Я не мог даже получить простые суммы для агрегирования, поэтому попытка агрегировать эту сумму была невозможна. При запуске моего скрипта в NodeJS я либо получаю undefined
, либо [object Object]
.
У меня нет ни малейшего представления о том, что происходит неправильно, поскольку я слежу за различными онлайн-примерами.
После попытки использовать ответ Парвин в ниже, я все еще получаю неопределенными:
collection.aggregate([
{$match : {"display.Name" : "LOG-11-05-SH-O1.mp4"}},
{$unwind : "$display"},
{$group : {_id : "$_id",
name : {$first : "$display.Name"},
total : {$sum : "$display.Count"}
}
}], function(err, result) {
console.log("Aggregation: " + result.total);
});
Я пытался форматировать код, как эти docs.
Интересно ... так что '$ sum' на самом деле не дает мне суммы, заставляя меня создавать цикл, чтобы добавить все значения массива. – krikara
@krikara Правильный способ исправить это - изменить ваши данные так, чтобы 'Count' - число, а не строка. – JohnnyHK
Да, я просто изменил счет на фактическое число. Но это все еще не сумма, поэтому мне все еще нужен цикл. Я думаю, это то, что меня больше смутило, потому что в оболочке Монго это была фактически сумма. Но NodeJS просто берет каждое отдельное значение и сохраняет его в массиве. – krikara