2017-07-01 3 views
1

Conversion MongoDB UUID de Mongo Shell s'avère être TYPE 03, ancien format. Comment pouvons-nous le faire fonctionner avec TYPE 04, format binaire?Mongo UUID Type 03 au lieu de 04 à partir de mongo shell

> db.foo.insert({"_id":1000,"key1":UUID("240003A09CEC456AB57B98FF8E0E45DB")}) 
    WriteResult({ "nInserted" : 1 }) 
> db.foo.find({_id:1000}) 
    { "_id" : 1000, "key1" : BinData(3,"JAADoJzsRWq1e5j/jg5F2w==") } 
> db.version() 
    3.4.2 

De code Java, nous pouvons utiliser bytebuffers et insérer comme UUID binaire de type 04, échantillon: BinData (4, "XWCwWqIVTfiEkTx9Yl + 2UQ ==").

Répondre

1

Vous pouvez mettre les données directement dans la fonction BinData() que le type 4, en extrayant l'encodage base64 et la fournir:

var t = BinData(4, UUID("240003a09cec456ab57b98ff8e0e45db").base64()) 
BinData(4,"JAADoJzsRWq1e5j/jg5F2w==") 

Et vous obtenez toujours la valeur fournie par hex:

t.hex() 
240003a09cec456ab57b98ff8e0e45db 

Ou seulement l'offre directement à HexData():

HexData(4,"240003a09cec456ab57b98ff8e0e45db") 
BinData(4,"JAADoJzsRWq1e5j/jg5F2w==") 

Si vous avez des données avec des traits d'union entre les deux puis utilisez .split() et .join() reformater:

var str = "240003A0-9CEC-456A-b57B-98FF8e0E45DB"; 
str.split('-').join("").toLowerCase(); 
"240003a09cec456ab57b98ff8e0e45db" 

billet A JIRA existe pour faire UUID() générer de type 4 par défaut SERVER-12835, mais il est une question de faible priorité. Pour une utilisation générale, vos interactions doivent être basées sur le "pilote". Mais il y a ces méthodes pour travailler avec le shell.

+0

Merci pour l'aide. Juste la curiosité, une raison pour laquelle la fonction UUID() est toujours conservé en tant que vieux format hérité? Est-ce qu'un type d'option peut être ajouté pour dire le type 04. – dilsingi

+0

@dilsingi Ca a toujours été ainsi, je ne vois pas comment le shell change. Il y a probablement un ticket JIRA, mais en tant que «service public», ce ne serait pas une haute priorité. Comme indiqué, il y a 'HexData' du shell ainsi que la méthode démontrée pour déplacer des données entre différents types. Le support principal est plutôt donné aux implémentations "pilote", que vous devriez utiliser à la place de n'importe quel usage industriel. –

+0

@dilsingi Ajout du problème JIRA pour référence. Mais comme indiqué, c'est une faible priorité. Utilisez les méthodes comme indiqué lorsque vous travaillez depuis le shell. –