What if we have to query on MongoDB collections based on the "_id" field, Can we really query on "_id" field ? If so, what is the syntax ? Let's try this out -
Let's first fetch a document's id -
$ db.user.find_one()
{'_id': ObjectId('5c16e863817810ed3fc5e5f9'),
'Fname': 'atul',
'Lname': 'Singh',
'Grade': 12.0,
'College': 'SGM',
'Job': 'Student',
'Address': 'Young St.'}
Now, we will pick the object id and use this to fetch the same document from collection
$ db.user.find_one({'_id':'5c16e863817810ed3fc5e5f9'}) #this will return nothing
$ db.user.find_one({'_id':ObjectId('5c16e863817810ed3fc5e5f9')})
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
in
----> 1 db.user.find_one({'_id':ObjectId('5c16e863817810ed3fc5e5f9')})
NameError: name 'ObjectId' is not defined
We have received this error because ObjectId is not the same as its string representation, it must be converted to ObjectId from a string before it is passed to find command.
$ from bson.objectid import ObjectId
$ db.user.find_one({'_id':ObjectId('5c16e863817810ed3fc5e5f9')})
{'_id': ObjectId('5c16e863817810ed3fc5e5f9'),
'Fname': 'atul',
'Lname': 'Singh',
'Grade': 12.0,
'College': 'SGM',
'Job': 'Student',
'Address': 'Young St.'}
IPYTHON Notebook can be found HERE
Facebook Page Facebook Group Twitter Feed Google+ Feed Telegram Group