Reputation: 806
[
{ "item": "journal", "qty": 25,"date":"1/1/2016", "status": "A" },
{ "item": "notebook", "qty": 50,"date":"10/1/2016", "status": "A" },
{ "item": "paper", "qty": 100,"date":"20/1/2016", "status": "D" },
{ "item": "planner", "qty": 75,"date":"1/2/2016", "status": "D" },
{ "item": "postcard", "qty": 45,"date":"10/2/2016", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"20/5/2016", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"30/7/2016", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"2/3/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"5/5/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"6/5/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"8/10/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"11/10/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"12/11/2017", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"4/3/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"5/6/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"6/7/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"7/7/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"17/11/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"19/12/2018", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"5/1/2019", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"7/1/2019", "status": "A" },
{ "item": "postcard", "qty": 45,"date":"14/3/2019", "status": "A" }
]
Above Is my database structure.
db.lichi.find({date: {$gte : '1/1/2016', $lt : '1/1/2019'}})
Here is the query i am trying to fetch data from database.
Here in database i have string formatted date. I am tring to fetch using above way that, didn't work.
gave result
{ "item": "journal", "qty": 25,"date":"1/1/2016", "status": "A" },
{ "item": "notebook", "qty": 50,"date":"10/1/2016", "status": "A" }
Only two documents.
PLease have a look.
Upvotes: 1
Views: 88
Reputation: 49945
Storing dates as string is not the best idea since in case like this you have to compare strings instead of dates. If for some reason you have to keep date
as string then you can convert it in your query using $dateFromString and then apply your filtering condition:
db.lichi.aggregate([
{
$addFields: {
date: {
$dateFromString: {
dateString: "$date",
format: "%d/%m/%Y"
}
}
}
},
{
$match: {
date: { $gte: ISODate("2016-01-01T00:00:00Z"), $lt: ISODate("2019-01-01T00:00:00Z") }
}
}
])
Upvotes: 1