2010-11-14 8 views
15

Por ejemplo ...¿Está bien usar el "ID de objeto" de Mongo como su identificador único? Si es así, ¿cómo puedo convertirlo a una cadena y buscarlo por cadena?

user/view/?id=324gijsdfi3h25o1 

puedo str() ... pero ...

Como puedo find hacia arriba por la cadena?

Editar: Quiero que cada documento en Mongo tenga un identificador único (normalmente una cadena) que pueda consultar. Esperaba que Object ID fuera así (ya que tiene muchas letras y es único). Y quiero que funcione con HTTP GET. vista? uid = e93jfsb0e3jflskdjf

+0

Puede aclarar la pregunta proporcionando lo que los documentos no responden: http://www.mongodb.org/display/DOCS/Object+IDs –

Respuesta

17

Es posible construir una nueva ObjectId utilizando la cadena. En este ejemplo se utiliza la consola MongoDB:

db.users.find({ _id: ObjectId("4cdfb11e1f3c000000007822") }) 

no puedo decir de tu pregunta qué controlador idioma que está utilizando (o ninguna en absoluto), pero la mayoría de los conductores también soportar esta funcionalidad.

NO debe convertir el ObjectId en la base de datos a una cadena, y luego compararlo con otra cadena. Si hiciera esto, MongoDB no puede usar el índice _id y deberá escanear todos los documentos, lo que dará como resultado un bajo rendimiento de las consultas.

+2

¿De qué otro modo podría compararlo con otras cadenas, si lo hago? ¿Usar el ObjectID como el identificador único? – TIMEX

+0

@TIMEX: ¿Qué quieres decir? ¿Podría actualizar su pregunta para explicar exactamente lo que está tratando de lograr? –

+2

Quiero que cada documento en Mongo tenga un identificador único (generalmente una cadena) que pueda consultar.Esperaba que Object ID fuera así (ya que tiene muchas letras y es único). Estoy compilando un blog y quiero que funcione con HTTP GET. view? uid = e93jfsb0e3jflskdjf – TIMEX

12

a sus preguntas:

¿Está bien usar “Object ID” Mongo como su identificador único?

Sí, está destinado a este fin. Hacer identificaciones únicas puede ser un problema en entornos fragmentados, por lo que MongoDB hace esto por usted.

En caso afirmativo, ¿cómo puedo convertirlo en una secuencia y buscarlo por cadena?

Do not. No es una cadena. MongoDB realmente le permite anular la identificación predeterminada. Entonces, si comienzas a buscar #"4cdfb11e1f3c000000007822", Mongo cree que estás buscando una cadena. Si en su lugar busca ObjectId("4cdfb11e1f3c000000007822"), Mongo buscará el ObjectId (o MongoID).

En su pregunta, parece que está tratando de pasarlo como una cadena. Cómo convertir esto a un "objeto fijo" dependerá de su controlador. PHP tiene un MongoId. Otros controladores tienen una función similar.

0

ObjectId es una forma útil de generar un _id único, pero puede hacerlo usted mismo. Para su ejemplo,

var o = {_id: Math.random().toString(36).substring(10)}; 
collection.insert(o, handleCollision); 

funciona bien, aunque usted mismo debe manejar las colisiones. Luego puede usar comparaciones directas de cadenas según sea necesario.

Cuestiones relacionadas