2016-06-10 2 views
-1
Sale.aggregate({ 
    $match: filter 
}, { 
    $group: { 
    "_id": { 
     "store_id": "$store_id", 
     //"created_on": { $dateToString: { format: "%Y-%m-%d", date: "$strBillDate" } } 
    }, 
    month: { 
     $month: "$strBillDate" 
    }, 
    store_id: { 
     $first: "$store_id" 
    }, 
    strBillAmt: { 
     $sum: "$strBillAmt" 
    }, 
    strBillNumber: { 
     $sum: 1 
    } 
    } 
}) 

Вместо даты, мне нужно продажи группы в месяцах, как группа продаж в месяцах в nodejsкак сгруппировать данные по месяцам в nodejs?

+0

Показать структуру БД. – Shrabanee

+0

store_id: {type: String}, strBillNumber: {type: String}, strBillDate: {type: Date}, strBillAmt: {type: Number}, –

ответ

0

Я использовал projection первый в агрегированной цепи для извлечения ежемесячных и годовых значений и сделал группировку впоследствии:

<doc-name>.aggregate([ 
    { $project: 
     { _id: 1, 
      year: { $year: "$date" }, 
      month: { $month: "$date"}, 
      amount: 1 
     } 
    }, 
    { $group: 
     { _id: { year: "$year", month: "$month" }, 
      sum: { $sum: "$amount" } 
     } 
    }]) 

Я также попытался с вашей моделью:

var testSchema = mongoose.Schema({ 
    store_id: { type: String }, 
    strBillNumber: { type: String }, 
    strBillDate: { type: Date }, 
    strBillAmt: { type: Number } 
}); 

var Test = mongoose.model("Test", testSchema); 

Создайте несколько тестовых данных:

var test = new Test({ 
    store_id: "1", 
    strBillNumber: "123", 
    strBillDate: new Date("2016-04-02"), 
    strBillAmt: 25 
}); 
var test2 = new Test({ 
    store_id: "1", 
    strBillNumber: "124", 
    strBillDate: new Date("2016-04-01"), 
    strBillAmt: 41 
}); 
var test3 = new Test({ 
    store_id: "3", 
    strBillNumber: "125", 
    strBillDate: new Date("2016-05-13"), 
    strBillAmt: 77 
}); 

Выполните запрос:

Test.aggregate([ 
    { $project: 
     { store_id: 1, 
      yearBillDate: { $year: "$strBillDate" }, 
      monthBillDate: { $month: "$strBillDate" }, 
      strBillAmt: 1 
     } 
    }, 
    { $group: 
     { _id: {yearBillDate: "$yearBillDate", monthBillDate:"$monthBillDate"}, 
      sum: { $sum: "$strBillAmt" } 
     } 
    } 
    ], function(err, result) { 
     console.log(err, result)}); 

И получил разумный результат: result of aggregate query

+0

не работает для меня –

+0

Получаете ошибку или не работаете из-за своего модель данных? – FlorianE

+0

not bcoz модели –