user1094206
user1094206

Reputation: 928

Date day/minute in mongodb queries

I have time series data stored in a mongodb database, where one of the fields is an ISODate object. I'm trying to retrieve all items for which the ISODate object has a zero value for minutes and seconds. That is, all the objects that have a timestamp at a round hour.

Is there any way to do that, or do I need to create separate fields for hour, min, second, and query for them directly by doing, e.g., find({"minute":0, "second":0})?

Thanks!

Upvotes: 4

Views: 4521

Answers (3)

chridam
chridam

Reputation: 103365

Use the $expr operator along with the date aggregate operators $minute and $second in your find query as:

db.collection.find({
    '$expr': {
        '$and': [
            { '$eq': [ { '$minute': '$dateField' }, 0 ] },
            { '$eq': [ { '$second': '$dateField' }, 0 ] },
        ]
    }
})

Upvotes: 4

Sammaye
Sammaye

Reputation: 43884

You could do this as @Devesh says or if it fits better you could use the aggregation framework:

db.col.aggregate([
   {$project: {_id:1, date: {mins: {$minute: '$dateField'}, secs: {$second: '$dateField'}}}},
   {$match: {mins: 0, secs: 0}}
]);

Like so.

Upvotes: 6

Devesh
Devesh

Reputation: 4550

Can you have one more column added in the collection only containing the datetime without minutes and seconds . It will make your query faster and easy to use. It will be datetime column with no minutes and seconds parts

Upvotes: 1

Related Questions