Difference between revisions of "MongoDB ObjectIds"
Line 36: | Line 36: | ||
The following examples creates a new projectCollection, with two projects: | The following examples creates a new projectCollection, with two projects: | ||
db.projCollection.insert( | db.projCollection.insert( | ||
− | { | + | { _id: 10, |
− | |||
projno: 110, | projno: 110, | ||
proj_name: 'Oracle Project', | proj_name: 'Oracle Project', | ||
Line 45: | Line 44: | ||
db.projCollection.insert( | db.projCollection.insert( | ||
− | + | { _id: 20, | |
projno: 120, | projno: 120, | ||
proj_name: 'MongoDB Project', | proj_name: 'MongoDB Project', | ||
budget: 20000, | budget: 20000, | ||
} | } | ||
− | ) | + | ) |
+ | |||
+ | If you try and reuse the same objectId: | ||
+ | |||
+ | db.projCollection.insert( | ||
+ | { _id: 10, | ||
+ | projno: 210, | ||
+ | proj_name: 'Other Oracle Project', | ||
+ | budget: 10000, | ||
+ | } | ||
+ | ) | ||
+ | |||
+ | You will get a ''E11000 duplicate key error collection'' error message. | ||
== Querying with ObjectIds == | == Querying with ObjectIds == |
Revision as of 19:41, 21 October 2016
Main Page >> MongoDB >>MongoDB Workbook >> Object IDs
Object IDs
You may have noticed that the database creates an unique object for each document:
db.deptCollection.find().pretty()
Examine the output carefully and you will notice for each department in the collection something like:
"_id" : ObjectId("5808e3d2ec0ff55100af2649")
An ObjectId is like a primary key found in relational databases, except in this case it is globally unique across the whole database, not just one table. It is similar to objectIds found in object-oriented programming languages.
ObjectIds created by MongoDB are a 12-byte BSON type, with the following structure:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
time | machine | pid | inc |
Where:
- time: timestamp - the time in seconds
- machine: machine identifier
- pid: process identifier
- inc: auto-incrementing counter
Adding ObjectIds
You can assign an objectId yourself to a document, but you do need to ensure it will be globally unique, so treating it as a primary key is not a good idea. Alternatively, you can use the ObjectId() function to add one.
The following examples creates a new projectCollection, with two projects:
db.projCollection.insert( { _id: 10, projno: 110, proj_name: 'Oracle Project', budget: 10000, } ) db.projCollection.insert( { _id: 20, projno: 120, proj_name: 'MongoDB Project', budget: 20000, } )
If you try and reuse the same objectId:
db.projCollection.insert( { _id: 10, projno: 210, proj_name: 'Other Oracle Project', budget: 10000, } )
You will get a E11000 duplicate key error collection error message.
Querying with ObjectIds
db.deptCollection.find({ "employees._id" : ObjectId("580a0e5bf090aeb82af5566c")}).pretty()
Still returns whole array!
Updates with ObjectIds
The objectId can be used to update a record. For example, we want to update employee 2222.