MongoDB只使用中间件插入UUID?

use*_*373 2 uuid buffer mongodb node.js

我不知道如何正确地将UUID插入MongoDB.
例如:

db.users.insert({ uuid: UUID(buffer) })
Run Code Online (Sandbox Code Playgroud)

缓冲区必须是32个十六进制字符串,MongoDB本身不创建UUID,只存储这个?我是正确的?但是在我创建随机UUID的地方,例如通过Node.js中间件,我有一个随机UUID 11986aba-7c5a-4626-b354-80be23c25516,所以它是一个36长度的字符串,现在我无法将其放入UUID(buffer).我应该用node.js uuid模块生成的这个UUID做什么?以后如何将MongoDB中插入的值作为普通的uuid字符串读取?

Syl*_*oux 6

BSON,因此MongoDB支持UUID类型.在Mongo Shell中,您可以使用UUID()构造函数将32位十六进制数字字符串转换为UUID内部表示形式.

从node.js开始,使用该node-uuid模块可以轻松生成v1v4 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>
Run Code Online (Sandbox Code Playgroud)

然后,您可以将其转换为类型4二进制SUBTYPE_UUID(或不推荐的类型3 SUBTYPE_UUID_OLD):

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

从Mongo Shell中,您可以获得以下值:

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

请注意,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==") }
//                                                               ^
Run Code Online (Sandbox Code Playgroud)