Как получить дополнительное поле при использовании $ group в mongoDB? - PullRequest
0 голосов
/ 29 февраля 2020

Я хочу узнать, насколько эффективен торговый представитель в компании по заказам, которые они представили. Таким образом, я создал группу по имени торгового представителя и общей выручке в модели счета. Модель счета-фактуры представляет собой схему счета-фактуры, которая отправляется торговым представителем.

analytics.controller. js

exports.topBestSalesrep = (req,res)=> {
    Invoice
        .aggregate(
            [
                {
                    $group : {
                        _id : '$salesrepName',                 
                        totalSum:{$sum:'$totalValue'}           
                    }
                },
                {
                    $sort:{totalSum:-1}
                },
                {
                     $limit : 10
                },
                // {
                //     $project:{ _id:1, area:'$customerArea' }
                // }
            ]
        )
        .then(data=>{
            return res.status(200).json(data);
        })
        .catch(err =>{
            return res.status(400).json(err);
        })

}

invoice.model. js

const mongoose=require('mongoose');

const Schema=mongoose.Schema;
const invoiceSchema = new Schema({

  _id: mongoose.Schema.Types.ObjectId,

  invoiceNo: {
    type: Number,
    required: true
  },
  salesrepName: {
    type: String
  },
  customerName: {
    type: String,
    required: true
  },
  customerArea:{
    type:String,
    required:true
  },
  totalValue: {
    type: Number,
    required: true
  },
  orderDate: {
    type: Date,
    default: Date.now
  }
},
{collection:'orders'});
const Invoice = mongoose.model('invoices',invoiceSchema);
module.exports=Invoice;

Здесь я хочу указать имя и область торгового представителя в возвращенных документах. Но даже если я использовал $project, я получаю только поля salesrepName и totalSum в восстановленных документах. Как я могу получить поле customerArea в возвращенных документах?

1 Ответ

1 голос
/ 29 февраля 2020

печатать из памяти, поэтому синтаксис может быть неправильным, но ищите $ pu sh в $ group.in mon go документы


                {
                    $group : {
                        _id : '$salesrepName',                 
                        totalSum:{$sum:'$totalValue'}  ,
                        items: { $push: $$ROOT }   // this emits the whole.object, becomes an array
                    }
                },

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

...