MongoDB只使用中间件插入UUID?

我不知道如何正确地插入到MongoDB的UUID。
例如:

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

缓冲区必须是32hexstring和MongoDB本地不创buildUUID,只存储这个? 我是对的? 但是,我创build随机的UUID,例如通过Node.js中间件,我有一个随机的UUID 11986aba-7c5a-4626-b354-80be23c25516 ,所以它是一个36长度的string,现在我不能把它放入UUID(buffer) 。 我应该怎么做这个从node.js uuid模块生成的UUID? 以后如何从MongoDB中读取这个插入的值作为正常的uuidstring?

BSON,因此MongoDB支持UUIDtypes。 在Mongo Shell中,可以使用UUID()构造函数将32位hex数字string转换为UUID内部表示forms。

从node.js ,使用node-uuid模块,您可以轻松生成v1或v4 UUID,并将它们存储在缓冲区对象中:

 > 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> 

然后,可以将其转换为types4二进制SUBTYPE_UUID (或不build议使用的types3 SUBTYPE_UUID_OLD ):

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

从Mongo Shell ,你可以得到如下的价值:

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

请注意,Mongo Shell的UUID()函数将产生一个3型的SUBTYPE_UUID_OLD二进制:

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