mongodb - Mongo UUID 类型 03 而不是来自 mongo shell 的 04

标签 mongodb mongodb-query mongo-shell

Mongo Shell 的 MongoDB UUID 转换结果为 TYPE 03,旧格式。我们如何让它与 TYPE 04,二进制格式一起工作?

> 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

从 Java 代码中,我们能够使用字节缓冲区并插入 04 类型的二进制 uuid,示例:BinData(4,"XWCwWqIVTfiEkTx9Yl+2UQ==")。

最佳答案

您可以通过提取 base64 编码并提供它,将数据作为类型 4 直接放入 BinData() 函数中:

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

然后你仍然从十六进制中得到提供的值:

t.hex()
240003a09cec456ab57b98ff8e0e45db

或者直接提供给HexData():

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

如果数据之间有连字符,则使用 .split().join() 重新格式化:

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

存在使 UUID() 生成类型 4 作为默认 SERVER-12835 的 JIRA 票证,但这是一个低优先级问题。对于一般用途,您的交互应该基于“驱动程序”。但是有这些方法可以使用 shell。

关于mongodb - Mongo UUID 类型 03 而不是来自 mongo shell 的 04,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44866192/

相关文章:

mongodb - 如何关联MongoDB中的数据?

jquery - Python jquery 网页游戏

mongodb - MongoDB shell 中的无序批量更新记录

node.js - 超时错误 - MongoServerSelectionError:连接 ECONNREFUSED::1:27017 - [NodeJS + MongoDB]

mongodb - BinData() 中的十六进制而不是 base64 - MongoDB

node.js - 如何在 Mongoose 中更新引用数组

MongoDB 查询包含多个字段最常见值的计数

javascript - 使用多个键排序meteor mongodb

Mongodb:找到至少一个数组元素匹配的文档?

arrays - MongoDB 中的唯一索引