So I have this field called task_time
stored as string in Mongodb in 'YYYY-MM-DD'
format (eg. '2012-12-21').
Now I need to query this collection to get the data whose task_time
is within a given time interval.
The time interval is given as a pair of strings that represent start time and end time in 'YYYY-MM-DD hh:mm:ss'
format (eg. '2015-12-21 16:00:00').
Is there any way to do this directly in Mongo query without bringing this task to my javascript code?
MongoDB will treat them as they are - string data type. And, the string comparison rules will apply. You can safely store dates as strings and query on them as long as they are properly formatted for date, i.e., “YYYY-MM-ddTHH:mm:ss”.
Internally, Date objects are stored as a signed 64-bit integer representing the number of milliseconds since the Unix epoch (Jan 1, 1970). Not all database operations and drivers support the full 64-bit range. You may safely work with dates with years within the inclusive range 0 through 9999 .
We can use date () command to get a date as a string in a query without the new keyword or MongoDB shell.
The $toDate Operator The $toDate aggregation pipeline operator converts a value to a date. The value can be any type that that can be converted to a date, which is basically numbers, strings, and objectIds. See Mongo $toDate for more information and examples.
As I know $gte
and $lt
can work with strings too. The same in mongoose after this issue
items.find({
task_time: {
$gte: "2015-12-21 12:00:00",
$lt: "2015-12-21 16:00:00"
}
})
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With