У меня есть NodeJS API с Mon goose, и у меня возникают проблемы с подсчетом количества документов, вложенных в один документ. У меня есть схема с именем Profile и вложенные. У меня есть опыт работы с массивом записей. Моя цель - получить вывод в качестве примера:
{
"username": "Jakos",
"total_expereinces" = 2, << I want to add this
"experience": [
{
"image": "",
"_id": "5e26ff6d5be84a3aeeb2f7bc",
"title": "Senior Dev",
"role": "Dev",
"company": "ArosaDev",
"startDate": "2018-12-03T23:00:00.000Z",
"endDate": null,
"description": "",
"area": "",
"createdAt": "2020-01-21T13:41:01.873Z",
"updatedAt": "2020-01-21T13:41:01.873Z"
},
{
"image": "https://via.placeholder.com/150",
"_id": "5e28791604718d7edb521c5b",
"role": "Dev",
"company": "Mammamia",
"startDate": "2019-12-11T23:00:00.000Z",
"endDate": null,
"description": "",
"area": "Copenhagen",
"createdAt": "2020-01-22T16:32:22.848Z",
"updatedAt": "2020-01-22T16:32:22.848Z"
}
]
}
В данный момент я могу получить все без подсчета, и мой метод выглядит следующим образом:
experienceRouter.get("/:username", async (req, res) => {
console.log(req.params.username);
try {
const experiences = await Profiles.findOne(
{ username: req.params.username },
{ experience: 1, username: 1, _id: 0 }
).lean();
if (experiences) res.send(experiences);
res.status(404).send({ Message: "Not found any experience" });
} catch (error) {
res.status(500).send(err);
}
});
Я видел пример с Агрегация, и я попытался следовать, но вывод не так, как у меня в моих требованиях, поскольку он показывает весь профиль в выводе.
Метод, который я попытался с агрегацией был:
experienceRouter.get("/:username", async (req, res) => {
console.log(req.params.username);
try {
const numberOfExperiences = await Profiles.aggregate([
{ $match: { username: req.params.username } },
{ $unwind: "$experience" },
{ $project: { count: { $add: 1 } } },
{ $group: { _id: null, number: { $sum: "$count" } } }
]);
const experiences = await Profiles.findOne({
username: req.params.username
});
if (numberOfExperiences) {
if (experiences) res.send({ numberOfExperiences, experiences });
}
} catch (err) {
res.status(500).send(err);
}
});
Но вывод не такой хороший, как мне нужно, и вот что я вижу:
{
"numberOfExperiences": [
{
"_id": null,
"number": 4
}
],
"experiences": {
"imageUrl": "https://via.placeholder.com/150",
"_id": "5e26ff6d5be84a3aeeb2f7bb",
"firstname": "Jakub",
"surname": "Lemiszewski",
"email": "jakub@email.com",
"bio": "IT Geek",
"title": "Senior Dev",
"area": "Copenhagen",
"username": "Jakos",
"experience": [
{
"image": "",
"createdAt": "2020-01-21T13:41:01.873Z",
"updatedAt": "2020-01-21T13:41:01.873Z",
"_id": "5e26ff6d5be84a3aeeb2f7bc",
"title": "Senior Dev",
"role": "Dev",
"company": "ArosaDev",
"startDate": "2018-12-03T23:00:00.000Z",
"endDate": null,
"description": "",
"area": ""
},
Мне нужно иметь вывод, который я показал в начале, согласно моим требованиям в моем проекте, и я получать проблемы, чтобы сделать это.