I am trying to query documents based on particular date range. So I need all the documents where the createdDate is less than equal to current date and greater than equal to currentDate - 2. I am assuming that there is some issue in the date format between how mongo db stores and how I am trying to fire that in the query. Attached the screenshot. Can someone please help
getMessagesController.js
export const getMessages = async (req, res) => {
const currentUserId = req.user._id;
const activeScreenUserId = req.params.id;
const daysRange = parseInt(req.params.daysRange);
const currentDate = new Date();
const currentDateUTC = new Date(currentDate.toISOString());
// Calculate the date 2 days ago in UTC
const previousDate = new Date(currentDate);
previousDate.setUTCDate(currentDate.getUTCDate() - daysRange);
const previousDateUTC = new Date(previousDate.toISOString());
const conversation = await Conversation.findOne({
participants: { $all: [currentUserId, activeScreenUserId] },
});
if (!conversation) {
return res.status(200).json({
messages: [],
});
}
const messages = await Message.find({
conversationId: conversation._id,
createdDate: {
$gte: previousDateUTC,
$lte: currentDateUTC,
},
});
// const messages = conversation.messages.map((message) => {
// return message;
// });
res.status(200).json({
messages,
});
};
message.model.js
import mongoose from "mongoose";
const messageSchema = new mongoose.Schema(
{
conversationId: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: "Conversation",
},
senderId: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
receiverId: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
message: {
type: String,
required: true,
},
},
{ timestamps: true }
);
const Message = mongoose.model("Message", messageSchema);
export default Message;
