Donc, tout d'abord $binary
et BinData
sont fondamentalement la même chose écrite/représentée de différentes manières. En utilisant votre exemple et cette référence, vous pouvez l'écrire ainsi dans le mode "Mongo Shell":
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
Soit en mode "strict" cela devient :
{ "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" }
Maintenant, le type 3 ici fait référence au sous-type 3 (du type binaire) selon la spécification BSON, ce qui signifie qu'il s'agit d'un sous-type "UUID (ancien)". Selon la référence ci-dessus, la chaîne elle-même est en fait un base64
représentation d'une chaîne binaire. À cause de cela (j'en déduis) robomongo
convertit essentiellement l'UUID et l'affiche pour vous lorsque vous parcourez les données. Essayons de le faire manuellement à la place dans le mongo
shell, d'abord en le convertissant en hex :
> var foo = BinData(3, "AAGOBh3pqkWvtaK8AO2U9w==")
> foo.hex()
00018e061de9aa45afb5a2bc00ed94f7
Maintenant, connectons cela à un constructeur UUID et voyons s'il se traduit :
> var uuid = new UUID("00018e061de9aa45afb5a2bc00ed94f7")
> uuid
BinData(3,"AAGOBh3pqkWvtaK8AO2U9w==")
Et, c'est le cas - tout robomongo
fait est d'ajouter quelques tirets pour la lisibilité. Juste pour être complet, avec votre autre exemple, je vais supprimer les tirets et créer un UUID, afficher le BinData
version et reconvertir :
> var bar = UUID("d72f21fe47808040ab3da1fb01045d3a")
> bar
BinData(3,"1y8h/keAgECrPaH7AQRdOg==")
> bar.hex()
d72f21fe47808040ab3da1fb01045d3a
Par conséquent, ce que vous devez faire est de convertir vous-même l'encodage base64 dans le nœud. Je n'ai pas de node.js
environnement à tester, mais il semble que cela ait déjà été traité ailleurs sur le site.
MODIFIER :
Il s'agit d'une fonction de travail dans Node.JS qui convertit le binaire en Hex UUID :
function Bin2HexUUID(bin){
var hex = new Buffer(bin, 'base64').toString('hex');
return hex.replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, function (){
return arguments[1]+"-"+arguments[2]+"-"+arguments[3]+"-"+arguments[4]+"-"+arguments[5];
});
}
//use example
var binary_id = { "$binary" : "AAGOBh3pqkWvtaK8AO2U9w==", "$type" : "03" };
console.log(Bin2HexUUID(binary_id.$binary)); //00018e06-1de9-aa45-afb5-a2bc00ed94f7