How to write a date range query on ObjectId in MongoDB or date range query on _id in MongoDB? You can query on ObjectId or _id of MongoDB either greater than ($gt) or less than date ($lt).
1. Overview of Date Range query on ObjectId or _id in MongoDB
Most of the time we keep the default value in _id in MongoDB, which is the primary key in MongoDB. This is very easy as MongoDB by default keeps one primary key which is _id. In _id key, MongoDB keep date-time or timestamp of the system when inserted into MongoDB. You can query on ObjectId or _id of MongoDB either greater than ($gt) or less than date ($lt).
Here you can provide any one of them or both, it’s your choice based on the requirement. I would recommend not to keep a separate field for DateTime / timestamp. _id is sufficient to pull based on a date range.
2. Add Documents
For demonstrating purpose, first add few documents and then proceed further which help to learn.
db.user.insert({_id: ObjectId("54a440a80000000000000000"), "name":"ranjeet", "age":23, "ques": "objectId and mongoDB"}); db.user.insert({_id: ObjectId("54cd1f280000000000000000"), "name":"rob", "age":44, "ques": "query on objectId "}); db.user.insert({_id: ObjectId("54f209280000000000000000"), "name":"simmon", "age":40, "ques": "how to getTimeStamp from mongoDB"}); db.user.insert({_id: ObjectId("551ae7a80000000000000000"),"name":"jha", "age":30, "ques": "manipulation of objectId "});
3. Get Added documents
Pull the added documents by following query.
> db.user.find(); { "_id" : ObjectId("54a440a80000000000000000"), "name" : "ranjeet", "age" : 23, "ques" : "objectId and mongoDB" } { "_id" : ObjectId("54cd1f280000000000000000"), "name" : "rob", "age" : 44, "ques" : "query on objectId " } { "_id" : ObjectId("54f209280000000000000000"), "name" : "simmon", "age" : 40, "ques" : "how to getTimeStamp from mongoDB" } { "_id" : ObjectId("551ae7a80000000000000000"), "name" : "jha", "age" : 30, "ques" : "manipulation of objectId " }
4. Print ISODate of Documents
print ISODate of document while fetching by query.
db.user.find({}).forEach(function(doc) { var ts= doc._id.getTimestamp(); printjson(ts); })
Output
> db.getCollection('user').find({}).forEach(function(doc) { ... var ts= doc._id.getTimestamp(); ... printjson(ts); ... }); ISODate("2014-12-31T18:30:00Z") ISODate("2015-01-31T18:30:00Z") ISODate("2015-02-28T18:30:00Z") ISODate("2015-03-31T18:30:00Z")
5. Query between two dates on _id
var idMin = ObjectId(Math.floor((new Date('2015/1/31'))/1000).toString(16) + "0000000000000000") var idMax = ObjectId(Math.floor((new Date('2016/4/5'))/1000).toString(16) + "0000000000000000") db.user.find({_id:{$gt: idMin, $lt: idMax}}).pretty()
Output
> var idMin = ObjectId(Math.floor((new Date('2015/1/31'))/1000).toString(16) + "0000000000000000") > var idMax = ObjectId(Math.floor((new Date('2016/4/5'))/1000).toString(16) + "0000000000000000") > db.user.find({_id:{$gt: idMin, $lt: idMax}}).pretty() { "_id" : ObjectId("54cd1f280000000000000000"), "name" : "rob", "age" : 44, "ques" : "query on objectId " } { "_id" : ObjectId("54f209280000000000000000"), "name" : "simmon", "age" : 40, "ques" : "how to getTimeStamp from mongoDB" } { "_id" : ObjectId("551ae7a80000000000000000"), "name" : "jha", "age" : 30, "ques" : "manipulation of objectId " }
6. Drop the database
> use userdemo switched to db userdemo > db.dropDatabase() { "dropped" : "userdemo", "ok" : 1 }
7. Reference
Thanks for visiting this post for date range query on ObjectId or _id in MongoDB. You can also visit MongoDB Tutorial Listing page for more articles on MongoDB document-oriented database.
Write your comments or suggestions to improve this post. Happy Learning! 🙂