Есть ли способ создать mongodb как строки _id без mongodb?

Мне очень нравится формат _ids, сгенерированный mongodb. В основном потому, что я могу вытащить данные, подобные дате, из них на стороне клиента. Я планирую использовать другую базу данных, но все же хочу использовать этот тип _id для моего документа. Как создать эти идентификаторы без использования mongodb?

Спасибо!

Ответы

Ответ 1

Идентификаторы объектов обычно генерируются клиентом, поэтому любой драйвер MongoDB будет иметь код для их генерации.

Если вы ищете JavaScript, вот какой-то код из драйвера MongoDB Node.js:

https://github.com/mongodb/node-mongodb-native/blob/V0.9.7.4-dev/lib/mongodb/bson/objectid.js

И другое, более простое решение:

https://github.com/justaprogrammer/ObjectId.js

Ответ 2

Очень простой псевдоинструктор ObjectId в javascript:

const ObjectId = (m = Math, d = Date, h = 16, s = s => m.floor(s).toString(h)) =>
    s(d.now() / 1000) + ' '.repeat(h).replace(/./g, () => s(m.random() * h))

Ответ 3

У меня есть клиентский браузер, который генерирует ObjectId s. Я хотел убедиться, что я использую тот же алгоритм ObjectId в клиенте, что и тот, который используется на сервере. MongoDB имеет js-bson, который может быть использован для этого.

Если вы используете javascript с node.

npm install --save bson

Использование оператора require

var ObjectID = require('bson').ObjectID;

var id  = new ObjectID();
console.log(id.toString());

Использование оператора импорта ES6

import { ObjectID } from 'bson';

const id  = new ObjectID();
console.log(id.toString());

Библиотека также позволяет импортировать старые добрые теги script, но я этого не пробовал.

Ответ 4

ruben-stolk ответ велик, но намеренно непрозрачен? Очень немного легче выделить:

const ObjectId = (rnd = r16 => Math.floor(r16).toString(16)) =>
    rnd(Date.now()/1000) + ' '.repeat(16).replace(/./g, () => rnd(Math.random()*16));

(фактически немного меньше символов). Кудос, хотя!

Ответ 5

Здесь есть подробная спецификация

http://www.mongodb.org/display/DOCS/Object+IDs

Что вы можете использовать, чтобы катить свои собственные строки id