¿Cómo puedo generar un ObjectId con mangosta?

133

Me gustaría generar un MongoDB ObjectIdcon Mongoose. ¿Hay alguna manera de acceder al ObjectIdconstructor desde Mongoose?

  • Esta pregunta se trata de generar una nueva ObjectId desde cero. La ID generada es una nueva ID universalmente única.

  • Otra pregunta es sobre la creación ObjectIdde una representación de cadena existente . En este caso, ya tiene una representación de cadena de una ID (puede o no ser universalmente única) y la está analizando en un ObjectId.

Dmitry Minkovsky
fuente

Respuestas:

291

Puedes encontrar el ObjectIdconstructor en require('mongoose').Types. Aquí hay un ejemplo:

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

idEs un recién generado ObjectId.

Puede leer más sobre el Typesobjeto en la documentación de Mongoose # Tipos .

Dmitry Minkovsky
fuente
44
¿Cómo puedes estar seguro de que esto es realmente único? ¿Mangosta algún cheque antes?
R01010010
1
@ R01010010 vea cómo se generan (Google). No hay verificación, pero es probabilístico
Dmitry Minkovsky
13
Si genera 16777216 dentro de un segundo en la misma máquina, entonces probablemente obtendrá un duplicado. :)
joeytwiddle
Corrección: si genera 16777216 dentro de un milisegundo en la misma máquina, entonces probablemente obtendrá un duplicado. 😁
Evading Shadows
43

Puede crear un nuevo MongoDB ObjectIdcomo este usando mangosta:

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();
vapor accionado
fuente
14

Necesitaba generar identificadores mongodb en el lado del cliente.

Después de profundizar en el código fuente de mongodb, descubrí que generan ObjectID utilizando npm bsonlib.

Si alguna vez solo necesita generar un ObjectID sin instalar todo el paquete mongodb / mongoose, puede importar la bsonbiblioteca más ligera :

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

Nota: También hay un proyecto npm llamado bson-objectidser aún más ligero

Poyoman
fuente
6

Con sintaxis ES6

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
fuente