2011-05-11 5 views

Respuesta

8

Puede intentar utilizar los primeros 4 bytes de ObjectID (representarán la marca de tiempo).

Pero, para ser 100% seguro, es mejor crear una identificación corta realmente única, mediante la implementación de un contador. Puede usar una colección separada para mantener el valor actual de su contador.

Más detalles sobre la estructura de objeto de mongo se pueden encontrar aquí: http://www.mongodb.org/display/DOCS/Object+IDs

Como alternativa, se puede convertir convertir hexagonal representación string id a una representación basada en 36 símbolos (26 letras latinas + 10 dígitos). Obviamente será más corto.

Parece que hay una biblioteca de rubí, que puede hacer este tipo de conversiones http://rubyworks.github.com/radix/

+1

respuesta muy útil, pero ¿por qué 22 letras latinas + 10 dígitos en lugar de 26 letras latinas + 10 dígitos? – alapeno

+0

¡buen punto! no tengo ni idea, ¿por qué escribí 22 :) – aav

+0

Podemos profundizar y usar 52 letras latinas, 10 dígitos y algunos otros literales '_-' =) Y luego con radix64 obtenemos la longitud 'log64 (2^96) = 16' en lugar del 'log16 original (2^96) = 24'. –

6

Usted podría intentar Mongoid :: Token

https://github.com/thetron/mongoid_token

A partir de los documentos :

Este l ibrary es una forma rápida y sencilla de generar tokens únicos y aleatorios para sus documentos mongoid, en los casos en que no puede, o no desea utilizar slugs, o los ID de MongoDB predeterminados.

Mongoid :: Token puede ayudar a convertir esto:

http://myawesomewebapp.com/video/4dcfbb3c6a4f1d4c4a000012/edit

en algo más parecido a esto:

http://myawesomewebapp.com/video/83xQ3r/edit

0

Por qué no usar dylang/shortid?

En mangosta:

_id: { 
    type: String, 
    'default': shortid.generate 
}, 

o simplemente insertar directamente:

users.insert({ 
    _id: shortid.generate() 
    name: ... 
    email: ... 
    }); 
Cuestiones relacionadas