Wie kann ich mit Mungo eine ObjectId generieren?

132

Ich möchte ObjectIdmit Mongoose eine MongoDB generieren . Gibt es eine Möglichkeit, ObjectIdvon Mongoose aus auf den Konstruktor zuzugreifen ?

  • Bei dieser Frage geht es darum , ein neues ObjectId von Grund auf neu zu generieren . Die generierte ID ist eine brandneue, universell eindeutige ID.

  • Eine andere Frage betrifft das Erstellen einer ObjectIdaus einer vorhandenen Zeichenfolgendarstellung . In diesem Fall haben Sie bereits eine Zeichenfolgendarstellung einer ID - sie kann universell eindeutig sein oder nicht - und Sie analysieren sie in eine ObjectId.

Dmitry Minkovsky
quelle

Antworten:

290

Sie finden den ObjectIdKonstruktor auf require('mongoose').Types. Hier ist ein Beispiel:

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

idist eine neu generierte ObjectId.

Weitere Informationen zum TypesObjekt finden Sie in der Dokumentation zu Mongoose # Types .

Dmitry Minkovsky
quelle
4
Wie können Sie sicher sein, dass dies wirklich einzigartig ist? Hat Mungo schon mal einen Scheck?
R01010010
1
@ R01010010 Überprüfen Sie, wie diese generiert werden (Google). Es gibt keine Überprüfung, aber es ist wahrscheinlich
Dmitry Minkovsky
13
Wenn Sie 16777216 innerhalb einer Sekunde auf demselben Computer generieren, erhalten Sie wahrscheinlich ein Duplikat. :)
joeytwiddle
Korrektur: Wenn Sie 16777216 innerhalb einer Millisekunde auf demselben Computer generieren, erhalten Sie wahrscheinlich ein Duplikat. 😁
Ausweichen vor Schatten
43

Sie können eine neue MongoDB ObjectIdwie diese mit Mungo erstellen :

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();
dampfbetrieben
quelle
13

Ich musste auf Client-Seite Mongodb-IDs generieren.

Nachdem ich mich in den Mongodb-Quellcode vertieft hatte, stellte ich fest, dass sie ObjectIDs mit npm bsonlib generieren .

Wenn Sie jemals nur eine ObjectID generieren müssen, ohne das gesamte mongodb / mongoose-Paket zu installieren, können Sie die leichtere bsonBibliothek importieren :

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

Hinweis: Es gibt auch ein npm-Projekt mit dem Namen bson-objectid"noch leichter"

Poyoman
quelle
6

Mit ES6-Syntax

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
quelle