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 ?
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
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? –
Para convertir el GUID a la cadena base64: 'Convert.ToBase64String (Guid.NewGuid(). ToByteArray())' –