Я создаю API с использованием MongoDB, Nodejs и ExpressJS. У меня есть коллекция с именем членство
const membershipSchema = new Schema(
{
membership_id: {
type: Number,
required: [true, "ID is required"],
unique: true,
},
member_detail: [{ type: Schema.Types.ObjectId, ref: "user" }],
validity: {
type: Number,
enum: [30, 90, 180, 365],
required: true,
},
fee: {
type: Number,
required: [true, "fee is required"],
},
registration_fee: {
type: Number,
required: [true, "registration fee is required"],
},
total_fee: {
type: Number,
required: [true, "total_fee fee is required"],
},
// status: {
// type: Boolean,
// required: [true, "status fee is required"],
// },
startDate: {
type: Date,
required: [true, "Start date is required"],
},
endDate: {
type: Date,
required: [true, "End date is required"],
},
added_by: { type: String, required: true },
last_update: {
type: Date,
default: Date.now,
},
}
);
После добавления членства и запроса с помощью GET я получаю следующий ответ
{
"member_detail": [
{
"_id": "5ea1e43dd401c828f4d1cf7d",
"name": "member421"
}
],
"_id": "5ea1e4a3d401c828f4d1cf7f",
"last_update": "2020-04-23T18:55:31.311Z",
"membership_id": 421,
"added_by": "admin",
"validity": 30,
"fee": 3500,
"registration_fee": 500,
"total_fee": 4000,
"startDate": "2020-04-18T06:21:04.869Z",
"endDate": "2020-07-18T06:21:04.869Z",
"createdAt": "2020-04-23T18:55:31.313Z",
"updatedAt": "2020-04-23T18:55:31.313Z",
"__v": 0
}
Теперь я отправляю еще один запрос GET в коллекцию участников с запросом на тестирование и для получения разницы между двумя датами (endDate - Current Date (24/04/2020)) и его работой в порядке и дает следующий ответ
router.route("/alert").get((req, res) => {
Membership.aggregate(
[
{
$project: {
dayssince: {
$trunc: {
$divide: [
{ $subtract: ["$endDate", new Date()] },
1000 * 60 * 60 * 24,
],
},
},
},
},
],
(err, document) => {
if (err) {
return res.status(404).json({ error: true, message: err });
}
res.status(200).json({ data: document });
}
);
});
приведенный выше код возвращает мне этот результат
{
"data": [
{
"_id": "5ea1e4a3d401c828f4d1cf7f",
"dayssince": 85
}
]
}
Теперь я хочу объединить приведенный выше результат для каждого создаваемого мной членства
Ожидаемый результат
{
"member_detail": [
{
"_id": "5ea1e43dd401c828f4d1cf7d",
"name": "member421"
}
],
"_id": "5ea1e4a3d401c828f4d1cf7f",
"last_update": "2020-04-23T18:55:31.311Z",
"membership_id": 421,
"added_by": "admin",
"validity": 30,
"fee": 3500,
"registration_fee": 500,
"total_fee": 4000,
"startDate": "2020-04-18T06:21:04.869Z",
"endDate": "2020-07-18T06:21:04.869Z",
"createdAt": "2020-04-23T18:55:31.313Z",
"updatedAt": "2020-04-23T18:55:31.313Z",
"__v": 0
**"dayssince": 85**
}
Я столкнулся с агрегатной функцией, но я не знаю, как реализовать свой запрос. Если вам нужен какой-либо другой код из моего проекта, не стесняйтесь комментировать.