Jak mogę wygenerować ObjectId za pomocą mangusty?

133

Chciałbym wygenerować MongoDB ObjectIdz Mongoose. Czy istnieje sposób uzyskania dostępu do ObjectIdkonstruktora z Mongoose?

  • To pytanie dotyczy generowania nowego ObjectId od podstaw. Wygenerowany identyfikator to zupełnie nowy, uniwersalny, unikalny identyfikator.

  • Kolejne pytanie dotyczy tworzenia ObjectIdz istniejącej reprezentacji ciągu . W tym przypadku masz już ciąg reprezentujący identyfikator - może on być unikatowy uniwersalnie lub nie - i analizujesz go na plik ObjectId.

Dmitry Minkovsky
źródło

Odpowiedzi:

291

Możesz znaleźć ObjectIdkonstruktora na require('mongoose').Types. Oto przykład:

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

idto nowo wygenerowany plik ObjectId.

Możesz przeczytać więcej o Typesobiekcie w dokumentacji Mongoose # Types .

Dmitry Minkovsky
źródło
4
skąd możesz mieć pewność, że jest to naprawdę wyjątkowe? czy mangusta ma jakiś czek wcześniej?
R01010010
1
@ R01010010 sprawdź, jak są one generowane (Google). Nie ma czeku, ale jest to probabilistyczne
Dmitry Minkovsky
13
Jeśli wygenerujesz 16777216 w ciągu jednej sekundy na tym samym komputerze, prawdopodobnie otrzymasz duplikat. :)
joeytwiddle
Poprawka: jeśli wygenerujesz 16777216 w ciągu jednej milisekundy na tej samej maszynie, prawdopodobnie otrzymasz duplikat. 😁
Unikanie cieni
43

Możesz utworzyć nową MongoDB w ObjectIdten sposób, używając 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
źródło
14

Musiałem wygenerować identyfikatory mongodb po stronie klienta.

Po przekopaniu się do kodu źródłowego mongodb odkryłem, że generują one ObjectID za pomocą npm bsonlib.

Jeśli kiedykolwiek potrzebujesz tylko wygenerować ObjectID bez instalowania całego pakietu mongodb / mongoose, możesz zaimportować lżejszą bsonbibliotekę:

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

Uwaga: istnieje również projekt npm o nazwie, który bson-objectidjest jeszcze lżejszy

Poyoman
źródło
6

Ze składnią 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
źródło