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

时间:2017-07-01 23:20:26

标签: 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代码我们可以使用bytebuffers并插入类型04二进制uuid,示例:BinData(4," XWCwWqIVTfiEkTx9Yl + 2UQ ==")。

1 个答案:

答案 0 :(得分:3)

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

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

然后你仍然可以从hex获得提供的值:

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"

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