Difference between revisions of "MongoDB ObjectIds"
Line 33: | Line 33: | ||
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. | 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. | ||
+ | |||
+ | db.deptCollection.insert( | ||
+ | { | ||
+ | deptno: 100, | ||
+ | dname: 'ACCOUNTING', | ||
+ | loc: 'NEW YORK', | ||
+ | employees: [ | ||
+ | { | ||
+ | _id: new ObjectId(), | ||
+ | empno: 1111, | ||
+ | ename: 'SMYTH', | ||
+ | job: 'MANAGER', | ||
+ | mgr: 7839, | ||
+ | hiredate: new Date('2012-08-19'), | ||
+ | sal: 2450 | ||
+ | }, | ||
+ | { | ||
+ | _id: new ObjectId(), | ||
+ | empno: 2222, | ||
+ | ename: 'WILSON', | ||
+ | job: 'TECHNICAN', | ||
+ | mgr: 7782, | ||
+ | hiredate: new Date(), | ||
+ | sal: 1300 | ||
+ | } | ||
+ | ] | ||
+ | } | ||
+ | ) |
Revision as of 14:16, 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
Non-Default 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.
db.deptCollection.insert(
{ deptno: 100, dname: 'ACCOUNTING', loc: 'NEW YORK', employees: [ { _id: new ObjectId(), empno: 1111, ename: 'SMYTH', job: 'MANAGER', mgr: 7839, hiredate: new Date('2012-08-19'), sal: 2450 }, { _id: new ObjectId(),
empno: 2222,
ename: 'WILSON', job: 'TECHNICAN', mgr: 7782, hiredate: new Date(), sal: 1300 } ] } )