2012-05-15 15 views
14

Me gusta mucho el formato de _ids generado por mongodb. Sobre todo porque puedo extraer datos como la fecha de su lado del cliente. Estoy planeando usar otra base de datos, pero aún quiero ese tipo de _id para mi documento. ¿Cómo puedo crear estos identificadores sin usar mongodb?¿Hay alguna manera de crear mongodb como _id strings sin mongodb?

Gracias!

+0

Me gustaría saber si podemos producir id como objeto mongodb en otros lenguajes de programación, especialmente Java y C – Saifee

Respuesta

20

Un muy fácil pseudo generador de ObjectId en 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

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

7

Tengo un cliente de navegador que genera ObjectId s. Quería asegurarme de emplear el mismo algoritmo ObjectId en el cliente que el utilizado en el servidor. MongoDB tiene js-bson que se puede usar para lograr eso.

Si está utilizando javascript con nodo.

npm install --save bson

Usando comunicado

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

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

Usando instrucción de importación ES6

import { ObjectID } from 'bson'; 

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

La biblioteca también le permite importar el uso de buenas etiquetas script de edad, pero no he probado requerir esta.

+0

Gracias, esto es lo que estaba buscando. – Sgnl

1

La respuesta de ruben-stolk es genial, ¿pero deliberadamente opaca? Muy ligeramente más fácil de separar es:

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

(en realidad con un poco menos de caracteres). ¡Felicitaciones!

Cuestiones relacionadas