#javascript #node.js #mongodb #express #mongoose
#javascript #node.js #mongodb #выразить #мангуст
Вопрос:
Я использую Express в качестве своего бэкэнда и MongoDB в качестве базы данных. Мои модели выглядят примерно так:
Pyments:
var pymentSchema = new mongoose.Schema({
name: {
type: String,
enum: [
"VISA",
"MASTERCARD",
"CASH",
],
required: [true, "Need a type of pyment"],
},
total: {
type: Number,
default:0
},
});
Счет:
var billingSchema = new mongoose.Schema({
pyments: {
type: [Pyments],
required: true,
default:[]
}});
Мои сохраненные данные выглядят следующим образом:
"Bill": [
{
"_id": "5fe17af4a0f04d088ca24d36",
"pyments": [
{
"total": 1.6,
"name": "VISA"
},
{
"total": 1.25,
"name": "CASH"
}
]
},
{
"_id": "5fe8d6ede7adc919d4299d02",
"pyments": [
{
"total": 1.61,
"name": "VISA"
},
{
"total": 1.00,
"name": "MASTERCARD"
},
]
},
{
"_id": "5fea68a2eb0e382a50dae7a6",
"pyments": [
{
"total": 2.5,
"name": "VISA"
},
{
"total": 3.38,
"name": "MASTERCARD"
}
]
}]
Все, что я хочу, это получить, например, общее количество только в VISA
, CASH
и MASTERCARD
вот так:
(Возвращенный объект)
{
"Totals": [
{
"total": 5.71,
"name": "VISA"
},
{
"total": 1.25,
"name": "CASH"
},
{
"total": 4.38,
"name": "MASTERCARD"
}
]
}
Я действительно не знаю, что делать в этом случае, любая помощь будет оценена.
Ответ №1:
Вы можете использовать метод агрегации aggregate() и ниже этапы конвейера,
$unwind
деконструироватьpyments
массив$group
поpyments.name
и получить общую суммуpyment.total
использования$sum
BillSchemaModel.aggregate([
{ $unwind: "$pyments" },
{
$group: {
_id: "$pyments.name",
total: { $sum: "$pyments.total" }
}
}
])