2011-04-13 14 views

Respuesta

10

Tiene que comparar el valor _id con una instancia de BinData (no contra una cadena). Lamentablemente, el constructor BinData toma una cadena Base64 en lugar de una cadena hexagonal.

Al valor de su GUID le faltan dos dígitos hexadecimales al final, por lo que a los efectos de este ejemplo, supondré que son "00". Los valores siguientes son equivalentes:

hex: "E3E45566-AFE4-A564-7876-AEFF6745FF00" (ignoring dashes)

base64: "ZlXk4+SvZKV4dq7/Z0X/AA=="

Así que la consulta debe ser:

>db.person.find({_id : new BinData(3, "ZlXk4+SvZKV4dq7/Z0X/AA==")})

Estoy asumiendo que el subtipo binaria se estableció correctamente a 3. Si no, ¿qué controlador se utilizó para crear los datos ?

+2

oh querida, eso no es muy fácil de usar es! Voy a hidratar un MongoDB de MSSQL, usar guids existentes como claves y ejecutar consultas puntuales de vez en cuando. Supongo que tendré que encontrar una manera fácil de convertir manualmente guiones hexadecimales a base64. ¡Gracias por tu ayuda! – Journeyman

+0

Lo sé ... Traté de encontrar una función de Javascript que convertiría una cadena hexadecimal en una cadena de Base64 pero no parece haber una integrada en el lenguaje. Puede buscar las funciones que la gente ha escrito para hacer esto. ¿O podría escribir su programa de importación en C# en lugar de Javascript? –

+3

Para convertir el GUID a la cadena base64: 'Convert.ToBase64String (Guid.NewGuid(). ToByteArray())' –

15

Usted puede utilizar fácilmente:

.find({ "_id" : CSUUID("E3E45566-AFE4-A564-7876-AEFF6745FF")}) 
+2

CSUUID no es "estándar" en mongo. Debe obtener el archivo del controlador de almacenamiento compartido e incluirlo al iniciar el shell. Más información al respecto aquí: http://stackoverflow.com/a/8252047/111625 –

4

podría utilizar la siguiente función js delante de la consulta de este modo:

function LUUID(uuid) { 
    var hex = uuid.replace(/[{}-]/g, ""); // removes extra characters 
    return new UUID(hex); //creates new UUID 
} 

db.person.find({"_id" : LUUID("E3E45566-AFE4-A564-7876-AEFF6745FF"}); 

Usted puede ahorrar la función en el archivo .js y cargarlo o ábralo antes de hacer su consulta y si copia el valor de sus resultados, debe cambiar el nombre de la función con:

  • L UUID para Legacy UUID
  • JUUID para Java codificación
  • NUUID para .NET codificación
  • CSUUID para C# codificación
  • PYUUID para el pitón codificación