MongoDB 仅使用中间件插入 UUID?

MongoDB insert UUID only using middleware?

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

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

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

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

从node.js,使用node-uuid模块你可以轻松生成v1 or 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>

然后您可以将其转换为类型 4 二进制文件 SUBTYPE_UUID(或已弃用的类型 3 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==") }
//                                                               ^