У меня есть три схемы, первая называется Stats, вторая - City, а третья - Region
//Stats Schema
const statSchema = new Schema({
city: {
type: Schema.Types.ObjectId,
ref: 'City'
},
record_date: Date,
active_cases: Number,
total_cases: Number,
new_cases: Number,
total_recovered: Number,
new_recovered: Number,
total_deaths: Number,
new_deaths: Number
});
//City Schema
const citySchema = new Schema({
region: {
type: Schema.Types.ObjectId,
ref: 'Region'
},
name: String
});
//Region Schema
const regionSchema = new Schema({
name: String
});
Теперь мне нужно собрать статистику по регионам, совпадая только с последней record_date, а затем сложите все вместе, чтобы получить только один объект статистики по регионам, как я могу это сделать, используя mon goose?
/////////
Edit: я понял способ собирать статистику по регионам при сопоставлении с последней record_date, но у меня все еще есть одна проблема, у меня есть только идентификатор региона, мне также нужно имя, добавление region_name в схему города решило проблему, но я думаю, что это неправильный способ сделать это, вот где я нахожусь ..
router.route("/join").get(function (req, res) {
Stats.aggregate(
[{
$match: {
record_date: new Date(2020, 2, 31)
}
},
{
$lookup: {
from: "cities",
localField: "city",
foreignField: "_id",
as: "city"
}
},
{
$group: {
_id: "$city.region",
total_cases: {
$sum: "$total_cases"
},
active_cases: {
$sum: "$active_cases"
},
total_recovered: {
$sum: "$total_recovered"
},
total_deaths: {
$sum: "$total_deaths"
},
new_cases: {
$sum: "$new_cases"
}
}
}
],
function (err, result) {
if (err) {
res.send(err);
} else {
res.json(result);
}
}
);
});