207

I'd like to generate a MongoDB ObjectId with Mongoose. Is there a way to access the ObjectId constructor from Mongoose?

  • This question is about generating a new ObjectId from scratch. The generated ID is a brand new universally unique ID.

  • Another question asks about creating an ObjectId from an existing string representation. In this case, you already have a string representation of an ID—it may or may not be universally unique—and you are parsing it into an ObjectId.

Dmitry Minkovsky
  • 36,185
  • 26
  • 116
  • 160

5 Answers5

424

You can find the ObjectId constructor on require('mongoose').Types. Here is an example:

var mongoose = require('mongoose');
var id = mongoose.Types.ObjectId();

id is a newly generated ObjectId.


Note: As Joshua Sherman points out, with Mongoose 6 you must prefix the call with new:

var id = new mongoose.Types.ObjectId();

You can read more about the Types object at Mongoose#Types documentation.

Dmitry Minkovsky
  • 36,185
  • 26
  • 116
  • 160
65

You can create a new MongoDB ObjectId like this using mongoose:

var mongoose = require('mongoose');
var newId = new mongoose.mongo.ObjectId('56cb91bdc3464f14678934ca');
// or leave the id string blank to generate an id with a new hex identifier
var newId2 = new mongoose.mongo.ObjectId();
steampowered
  • 11,809
  • 12
  • 78
  • 98
32

I needed to generate mongodb ids on client side.

After digging into the mongodb source code i found they generate ObjectIDs using npm bson lib.

If ever you need only to generate an ObjectID without installing the whole mongodb / mongoose package, you can import the lighter bson library :

const bson = require('bson');
new bson.ObjectId(); // 5cabe64dcf0d4447fa60f5e2

Note: There is also an npm project named bson-objectid being even lighter

Poyoman
  • 1,652
  • 1
  • 20
  • 28
29

With ES6 syntax

import mongoose from "mongoose";

// Generate a new new ObjectId
const newId2 = new mongoose.Types.ObjectId();
// Convert string to ObjectId
const newId = new mongoose.Types.ObjectId('56cb91bdc3464f14678934ca');
MattCochrane
  • 2,900
  • 2
  • 25
  • 35
  • 2
    what's the diff between mongoose.Type and mongoose.Schema.Types ? – MartianMartian Feb 21 '22 at 11:18
  • mongoose.Schema.Types will be used to within your schema when you want to reference between collections. To create a single objectId within your code use simply mongoose.Types – stefano Mar 08 '22 at 13:43
  • @stefano, mongoose.Schema.Types.ObjectId and mongoose.Types.ObjectId, is the exactly same – Normal Sep 27 '22 at 17:30
0

The import is mongo from mongoose, the node-mongodb-native driver. If you open the package you can verify !

import { mongo } from 'mongoose'
const newId = new mongo.ObjectId()
Canonne Gregory
  • 378
  • 4
  • 9