I am aggregate code is not working i am new to mongodb

so i am new to mongo db and don’t know why my logic is not working…its showing me an empty array when i try to get a value of specficly something, here is the code

let totalEarnedCurrentMonth;
    
        try {
            const { startDate, endDate } = req.query;
    
            // Calculate the start and end dates for the current month if not provided
            let currentMonthStartDate, currentMonthEndDate;
            if (!startDate && !endDate) {
                const currentDate = new Date();
                currentMonthStartDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
                currentMonthEndDate = new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0);
            } else {
                currentMonthStartDate = new Date(startDate);
                currentMonthEndDate = new Date(endDate);
            }
    
            totalEarnedCurrentMonth = await Ledger.aggregate([
                {
                    $match: {
                        projectId: { $in: await Project.find({ userId: req.user._id }, '_id') },
                        date: { $gte: currentMonthStartDate, $lte: currentMonthEndDate }
                    }
                },
                { $group: { _id: null, totalAmount: { $sum: '$amount' } } }
            ]);
    
            // Extract the total earnings from the aggregation result
            // const totalEarned = totalEarnedCurrentMonth.length ? totalEarnedCurrentMonth[0].totalAmount : 0;
            console.log(totalEarnedCurrentMonth);
            // res.status(200).json({ totalEarned });
        } catch (error) {
            console.error(error);
            res.status(500).json({ message: 'Server error' });
        }

Now the data which shows that i do have data in my database with specific needs

{ "_id": "66301f9a8b8889c0eac6d251", "projectId": "66301f108b8889c0eac6d248", "amount": 350, "type": "normal", "date": "2024-04-29T22:30:50.145Z", "__v": 0 },

i have multiple entries like this but still the get request on the the above api call is sending me an value of 0 why?? What mistake am i doing

Looks like type mismatched.

Your dates seem to be stored as string but you aggregate with Date objects. Make sure your dates are stored as Date and that your OID are stored as ObjectId.

3 Likes

Hello @Ashish_Oraon,

Can you print this line in console.log what it returns?

await Project.find({ userId: req.user._id }, '_id')

It might return an array of objects in this format I guess [{ _id: .. }, { _id: .. }], And as you have just objectId in the projectId property.

Just make sure your query with input value should be in this format:

projectId: { $in: ["66301f108b8889c0eac6d248", "66301f108b8889c0eac6d247"] },
1 Like

@Ashish_Oraon. please do not leave your thread dying without followup.

If any of the reply was the solution mark it as such. If you found another solution please publish it and mark it as the solution.

Thanks

1 Like