Como posso gerar um ObjectId com mangusto?


133

Eu gostaria de gerar um MongoDB ObjectIdcom o Mongoose. Existe uma maneira de acessar o ObjectIdconstrutor do Mongoose?

  • Esta pergunta é sobre gerar um novo a ObjectId partir do zero. O ID gerado é um novo ID universalmente novo.

  • Outra pergunta é sobre a criação ObjectIdde uma representação de string existente . Nesse caso, você já possui uma representação em cadeia de um ID - pode ou não ser universalmente exclusivo - e está analisando-o em um ObjectId.

Respostas:


291

Você pode encontrar o ObjectIdconstrutor em require('mongoose').Types. Aqui está um exemplo:

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

idé um recém-gerado ObjectId.

Você pode ler mais sobre o Typesobjeto na documentação do Mongoose # Types .


4
como você pode ter certeza de que isso é realmente único? mangusto alguma verificação antes?
R01010010

1
@ R01010010 veja como eles são gerados (Google). Não há nenhuma verificação mas é probabilística
Dmitry Minkovsky

13
Se você gerar 16777216 dentro de um segundo na mesma máquina, provavelmente receberá uma duplicata. :)
joeytwiddle

Correção: se você gerar 16777216 dentro de um milissegundo na mesma máquina, provavelmente receberá uma duplicata. 😁
Shadows

43

Você pode criar um novo MongoDB ObjectIdcomo este usando o 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();

14

Eu precisava gerar IDs do mongodb no lado do cliente.

Depois de pesquisar o código fonte do mongodb, descobri que eles geram ObjectIDs usando o npm bsonlib.

Se você precisar apenas gerar um ObjectID sem instalar o pacote mongodb / mongoose inteiro, poderá importar a bsonbiblioteca mais leve :

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

Nota: Há também um projeto npm chamado bson-objectidsendo ainda mais leve


6

Com sintaxe 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');
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.