2012-05-15 4 views
14

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

Спасибо!

+0

Я хотел бы знать, можем ли мы производить mongodb как идентификатор объекта в других языках программирования, особенно Java и C – Saifee

ответ

18

идентификаторы объектов, как правило, генерируются клиентом, так что любой драйвер 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

20

очень легко pseudo 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)) 
+1

и 'mongoose.Types.ObjectId.isValid' say' true' – webjay

7

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

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

npm install --save bson

Использование требуют ничего о

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

Библиотека также позволяет импортировать, используя хорошие теги старый сценарий, но я не пробовал это.

+0

Спасибо, это то, что я искал. – Sgnl

1

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

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

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