Я пытаюсь сгруппировать по продуктам в своей коллекции продаж и сложить их итоги, чтобы узнать, какие продукты являются самыми продаваемыми в моем приложении.
MON GOOSE MODEL
const mongoose = require('mongoose');
const DHCustomerinvoiceSchema = mon goose .Schema ({
Saledetail: {
type: Array,
required: true
},
date:{
type: Date,
required: true
},
total:{
type: Number,
required: true
},
pay:{
type: Number,
required: true,
default: 0
},
topay:{
type: Number,
required: true
},
user:{
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'UserDH'
},
customer:{
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'DHcontacto'
},
state:{
type: String,
default: "OWED"
},
created:{
type: Date,
default: Date.now()
},
});
module.exports = mongoose.model('DHCustomerinvoice', DHCustomerinvoiceSchema);
ПРИМЕР СБОРЫ
{
"id": "5ef6*****",
"Saledetail": [
{
"id": "5ebf*****",
"quantity": 9,
"price": 2000,
"totalline": 18000
}
],
"datesale": "1593129600000",
"grandtotal": 18000,
"user": "5eb9ab******",
"customer": {
"name": "isabella"
},
"state": "PAID"
},
РЕЗОЛЬВЕР:
mostSellingProducts: async (_,{},ctx)=>{
const Products = await invoice.aggregate([
{ $unwind: "$Saledetail" },
{ $match: { "state" : 'PAID'}},
{ $group: {
_id : "$Saledetail.id",
total: { $sum: '$Saledetail.totalline' }
}},
{
$lookup: {
from: 'dhproducts',
localField: '_id',
foreignField: "_id",
as: "producto"
}
},
{
$limit: 4
},
{
$sort : {total: -1}
}
]);
console.log(Products);
return Products;
},
Я использовал много методов, которые на самом деле не дали мне такого результата, но, тем не менее, я добился положительного результата с точки зрения поиска моих лучших клиентов, которые на самом деле развивают его с помощью агрегирования, сопоставления и группировки. применить sort и limit ... но с этим примером мне не удалось добиться успеха, и я предполагаю, что это потому, что архитектура коллекции отличается из-за расположения детали покупки