Hello, I start in mongo Db
Here’s what I’m trying to achieve
I have a voteTwentyHourCalcul object which contains the current date (Day) , a time (Hour) and a value (Value)
and voteTwentyHour which is equal to the sum of all the values
"voteTwentyHourCalcul": {
"twentyHourCalcul": [
{
"day": "2022-05-18",
"hour": 3,
"value": 1
},
{
"day": "2022-05-19",
"hour": 3,
"value": 2
},
{
"day": "2022-05-28",
"hour": 10,
"value": 2
},
{
"day": "2022-05-28",
"hour": 23,
"value": 5
},
{
"day": "2022-05-29",
"hour": 4,
"value": 2
},
{
"day": "2022-05-29",
"hour": 12,
"value": 8
},
{
"day": "2022-05-29",
"hour": 22,
"value": 5
},
{
"day": "2022-05-29",
"hour": 23,
"value": 10
},
{
"day": "2022-05-30",
"hour": 9,
"value": 5
},
{
"day": "2022-06-1",
"hour": 14,
"value": 2
},
{
"day": "2022-06-2",
"hour": 5,
"value": 8
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
}
]
},
"voteTwentyHour": 50,
I am looking to transform the value to 0 for all those who have a date 24 less than the current date
I think I have already succeeded in this step with the following code
exports.global = (req, res) => {
let yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
//Yesterday
let mondayYesterdayUtc = (yesterday.getUTCMonth() + 1)
mondayYesterdayUtc = parseInt(mondayYesterdayUtc);
let dayYesterdayUtc = yesterday.getUTCDate()
dayYesterdayUtc = parseInt(dayYesterdayUtc);
if (mondayYesterdayUtc < 10) {
mondayYesterdayUtc = '0' + mondayYesterdayUtc.toString()
}
if (dayYesterdayUtc < 10) {
dayYesterdayUtc = '0' + dayYesterdayUtc.toString()
}
let dateYesterdayUtc = yesterday.getFullYear() + '-' + mondayYesterdayUtc + '-' + dayYesterdayUtc;
Project.updateMany(
{},
{
$set: {
"voteTwentyHourCalcul.twentyHourCalcul.$[elem].value": 0
},
},
{
arrayFilters: [
{
$or: [
{ "elem.day": { $lt: dateYesterdayUtc } },
{ $and: [{ "elem.day": dateYesterdayUtc }, { "elem.hour": { $gte: yesterday.getUTCHours() } }] }
]
}]
},
(err, response) => {
if (err) return res.status(500).json({ msg: 'update failed', error: err });
res.status(200).json({ msg: `document updated`, response: response });
});
};
I get the following result
"voteTwentyHourCalcul": {
"twentyHourCalcul": [
{
"day": "2022-05-18",
"hour": 3,
"value": 0
},
{
"day": "2022-05-19",
"hour": 3,
"value": 0
},
{
"day": "2022-05-28",
"hour": 10,
"value": 0
},
{
"day": "2022-05-28",
"hour": 23,
"value": 0
},
{
"day": "2022-05-29",
"hour": 4,
"value": 0
},
{
"day": "2022-05-29",
"hour": 12,
"value": 0
},
{
"day": "2022-05-29",
"hour": 22,
"value": 0
},
{
"day": "2022-05-29",
"hour": 23,
"value": 0
},
{
"day": "2022-05-30",
"hour": 9,
"value": 0
},
{
"day": "2022-06-1",
"hour": 14,
"value": 0
},
{
"day": "2022-06-2",
"hour": 5,
"value": 8
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
},
{
"day": 0,
"hour": 0,
"value": 0
}
]
},
"voteTwentyHour": 50,
Request made on time at 11:34 UTC 2022-06-2
We obtain the value 0 for all the dates older than 24 hours compared to the current date
Now what I would like to do is recalculate “voteTwentyHour” which is equal to the sum of all the values
After the query it should be equal to 8
How should I go about this?
Thanks to everyone who tries to help me