Comment puis-je générer un ObjectId avec la mangouste?

133

Je voudrais générer un MongoDB ObjectIdavec Mongoose. Existe-t-il un moyen d'accéder au ObjectIdconstructeur depuis Mongoose?

  • Cette question concerne la génération d'un nouveau à ObjectId partir de zéro. L'ID généré est un tout nouvel ID unique universel.

  • Une autre question concerne la création d'un à ObjectIdpartir d'une représentation sous forme de chaîne existante . Dans ce cas, vous disposez déjà d'une représentation sous forme de chaîne d'un ID (il peut ou non être universellement unique) et vous l'analysez en un fichier ObjectId.

Dmitry Minkovsky
la source

Réponses:

291

Vous pouvez trouver le ObjectIdconstructeur sur require('mongoose').Types. Voici un exemple:

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

idest un nouvellement généré ObjectId.

Vous pouvez en savoir plus sur l' Typesobjet dans la documentation de Mongoose # Types .

Dmitry Minkovsky
la source
4
comment pouvez-vous être sûr que c'est vraiment unique? mangouste fait-elle un chèque avant?
R01010010
1
@ R01010010 découvrez comment ils sont générés (Google). Il n'y a pas de contrôle mais c'est probabiliste
Dmitry Minkovsky
13
Si vous générez 16777216 en une seconde sur la même machine, vous obtiendrez probablement un double. :)
joeytwiddle
Correction: Si vous générez 16777216 en une milliseconde sur la même machine, vous obtiendrez probablement un double. 😁
Evading Shadows
43

Vous pouvez créer un nouveau MongoDB ObjectIdcomme celui-ci en utilisant 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();
à vapeur
la source
14

J'avais besoin de générer des identifiants mongodb côté client.

Après avoir fouillé dans le code source de mongodb, j'ai trouvé qu'ils généraient des ObjectID en utilisant npm bsonlib.

Si jamais vous avez seulement besoin de générer un ObjectID sans installer tout le package mongodb / mongoose, vous pouvez importer la bsonbibliothèque plus légère :

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

Remarque: il existe également un projet npm nommé bson-objectidétant encore plus léger

Poyoman
la source
6

Avec la syntaxe 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
la source