MongoDB insert UUID only using middleware?

5.5k views Asked by At

i dont know how to insert UUID into MongoDB properly.
For example:

db.users.insert({ uuid: UUID(buffer) })

Buffer must be 32 hex string and MongoDB natively dont create UUID, only stores this? I'm right? But where i create the random UUID, e.g through Node.js middleware i have a random UUID 11986aba-7c5a-4626-b354-80be23c25516, so its a 36 length string and now i cant place it into UUID(buffer). What i should doing with this UUID generated from node.js uuid module? And how later read this inserted values from MongoDB as a normal uuid string?

1

There are 1 answers

4
Sylvain Leroux On BEST ANSWER

BSON, hence MongoDB support the UUID type. From the Mongo Shell, you can use the UUID() constructor to convert from a 32 hex-digits string to an UUID internal representation.

From node.js, using the node-uuid module you can easily generate v1 or v4 UUID and store them in a buffer object:

> my_uuid = uuid.v4(null, new Buffer(16))
<Buffer 91 ed c3 f0 20 36 4b f3 94 0c d3 d6 b0 a9 de 03>

You can then convert that to type 4 binary SUBTYPE_UUID (or the deprecated type 3 SUBTYPE_UUID_OLD):

> collection.insert({uuid: mongodb.Binary(my_uuid, mongodb.Binary.SUBTYPE_UUID)},
                    function(err, result) { /* ... */ })

From the Mongo Shell, you get back that value as:

> db.test.find()
{ "_id" : ObjectId("557b2a390c59394b35236dc9"), "uuid" : BinData(4,"ke3D8CA2S/OUDNPWsKneAw==") }

Please note, the Mongo Shell UUID() function will produce a type 3 SUBTYPE_UUID_OLD binary:

> db.test.insert({uuid:UUID('09352d90756741879c25e108d83290a2')})
{ "_id" : ObjectId("557b2acc0c59394b35236dcb"), "uuid" : BinData(4,"ke3D8CA2S/OUDNPWsKneAw==") }
{ "_id" : ObjectId("557b2b7984ee2ba0375f4fc9"), "uuid" : BinData(3,"CTUtkHVnQYecJeEI2DKQog==") }
//                                                               ^