How to Filter by Start Date and End Date in Mongoose

May 15, 2021

Sometimes, we’ll need to filter date in while fetching data from Mongodb using mongoose.

For example, let’s say we’ve a transaction schema and want to fetch all the transactions that has occurred in particular period.

Here’s how to do it:

// Transaction.js model
import mongoose from 'mongoose';
const { Schema } = mongoose;
const transactionSchema = new Schema({
  date: Date,
  // ....
});
export default mongoose.models.Transaction ||
  mongoose.model('Transaction', transactionSchema);
// fetchCurrentMonthTransactions.js
import mongoose from 'mongoose';
const Transaction = mongoose.model('Transaction');
// 👉 https://nesin.io/blog/get-start-end-date-of-month-in-javascript
const date = new Date();
const month = date.getMonth();
const year = date.getFullYear();
const startDate = new Date(year, month, 1);
const endDate = new Date(year, month + 1, 0);

const fetchTransactions = async () => {
  const filters = {
    date: {
      $gte: startDate,
      $lt: endDate,
    },
  };
  return Transaction.find({}).where(filters);
};

👋 I'm Ashik Nesin • Sr. Frontend Engineer @Chargebee 👨‍💻• I write about modern Javascript & building web apps

© 2021 Nesin Technologies LLP