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.

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 .


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();

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


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');
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.