Use $gte and <e mongo operator if date is in string format in mongodb
15,168
You can try below aggregation in mongodb 3.6
You can use $dateFromString
aggregation to convert your dob
from
string to date and then easily $count
the documents applying $match
on it.
1) Using aggregation with $addFields
db.panelists.aggregate([
{ "$addFields": {
"date": {
"$dateFromString": { "dateString": "$dob", "format": "%m-%d-%Y" }
}
}},
{ "$match": {
"date": {
"$gte": moment('08-02-1998').toDate(),
"$lte": moment('08-02-2003').toDate()
}
}},
{ "$count": "count" }
])
2) Using simple find query with $expr
db.collection.find({
"$expr": {
"$and": [
{
"$gte": [
{ "$dateFromString": { "dateString": "$dob", "format": "%m-%d-%Y" }},
ISODate("2000-02-22T00:00:00Z")
]
},
{
"$lte": [
{ "$dateFromString": { "dateString": "$dob", "format": "%m-%d-%Y" }},
ISODate("2000-02-24T00:00:00Z")
]
}
]
}
})
3) Using aggregation with $expr
db.collection.aggregate([
{ "$match": {
"$expr": {
"$and": [
{
"$gte": [
{ "$dateFromString": { "dateString": "$dob", "format": "%m-%d-%Y" }},
ISODate("2000-02-22T00:00:00Z")
]
},
{
"$lte": [
{ "$dateFromString": { "dateString": "$dob", "format": "%m-%d-%Y" }},
ISODate("2000-02-24T00:00:00Z")
]
}
]
}
}}
])
Author by
Nilesh Kumar
Updated on July 01, 2022Comments
-
Nilesh Kumar almost 2 years
I have dob field like
{dob:"02-23-2000"}
in database. Now I want to perform$gte
and<e
on dob field that is in string format like below:db.panelists.count({"dob":{ '$gte': '08-02-1998', '$lte': '08-02-2003' }});
I am getting count value as zero always.
Could anyone please help me out to resolve this query in same dob format.