Як я можу генерувати ObjectId з мангустом?


133

Я хотів би створити MongoDB ObjectIdз Mongoose. Чи є спосіб отримати доступ до ObjectIdконструктора з Монгуза?

  • Це питання стосується створення нового ObjectId з нуля. Згенерований ідентифікатор - це абсолютно новий універсально унікальний ідентифікатор.

  • Інше питання задається питанням створення ObjectIdіз наявного рядкового представлення . У цьому випадку у вас вже є рядкове представлення ідентифікатора - він може бути, а може і не бути універсальним унікальним - і ви аналізуєте його на ObjectId.

Відповіді:


291

Ви можете знайти ObjectIdконструктор на require('mongoose').Types. Ось приклад:

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

idє новоствореним ObjectId.

Детальніше про Typesоб’єкт можна прочитати в документації Mongoose # Types .


4
як ви можете бути впевнені, що це справді унікально? чи мангуст перевіряв раніше?
R01010010

1
@ R01010010 дізнайтеся, як вони створюються (Google). Перевірки немає, але це вірогідно
Дмитро Міньковський

13
Якщо ви генеруєте 16777216 протягом однієї секунди на одній машині, ви, ймовірно, отримаєте дублікат. :)
joeytwiddle

Виправлення. Якщо ви генеруєте 16777216 протягом однієї мілісекунди на одній машині, ви, ймовірно, отримаєте дублікат. 😁
Ухилення від тіней

43

Ви можете створити новий MongoDB на ObjectIdзразок цього за допомогою мангуста:

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

Мені потрібно було генерувати ідентифікатори mongodb на стороні клієнта.

Після заглиблення у вихідний код mongodb я виявив, що вони генерують ObjectID, використовуючи npm bsonlib.

Якщо вам коли-небудь потрібно лише генерувати ObjectID, не встановлюючи весь пакет mongodb / mongoose, ви можете імпортувати більш легку bsonбібліотеку:

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

Примітка. Також існує проект npm, який називається bson-objectidще легшим


6

З синтаксисом 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');
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.