Как я могу сгенерировать ObjectId с помощью мангуста?

133

Я хотел бы создать MongoDB ObjectIdс помощью Mongoose. Есть ли способ получить доступ к ObjectIdконструктору из Mongoose?

  • Этот вопрос касается создания нового 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 в течение одной миллисекунды на том же компьютере, вы, вероятно, получите дубликат. 😁
Shadows
43

Вы можете создать новую MongoDB, ObjectIdиспользуя 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

Мне нужно было сгенерировать идентификаторы mongodb на стороне клиента.

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

Если вам нужно только сгенерировать ObjectID без установки всего пакета mongodb / mongoose, вы можете импортировать более легкую bsonбиблиотеку:

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

Примечание: есть еще проект npm, который называется bson-objectidеще легче.

Poyoman
источник
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');
MattCochrane
источник