Difference between revisions of "MongoDB ObjectIds"

From mi-linux
Jump to navigationJump to search
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:

ObjectID layout
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
     }
   ]
  } 
)