【问题标题】:Mongo UUID Type 03 instead of 04 from mongo shellMongo UUID 类型 03 而不是来自 mongo shell 的 04
【发布时间】:2017-07-01 23:20:25
【问题描述】:

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==")。

【问题讨论】:

    标签: mongodb mongodb-query mongo-shell


    【解决方案1】:

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

    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"
    

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

    【讨论】:

    • 感谢您的帮助。只是好奇,为什么 UUID() 函数仍然保留为旧的旧格式?可以添加选项类型以说类型 04.
    • @dilsingi 一直都是这样,不知何故我没有看到外壳发生变化。周围可能有一张 JIRA 票,但作为“实用程序”,它不会是高优先级。如前所述,shell 中有HexData 以及在不同类型之间移动数据的演示方法。主要支持“驱动程序”实现,对于任何工业目的,您都应该使用它。
    • @dilsingi 添加了 JIRA 问题以供参考。但如前所述,它的优先级较低。在 shell 中工作时使用所示的方法。
    • 再次感谢您。注意到文档中有一些带有“-”分隔符的数据。他们在使用 HexData db.foo.insert({"_id":1002,"key1":HexData(4,'AC1AAB22-0BF9-4127-BDC2-9C11398130AE')}) 2017-07-01T19:10 时出错:41.286-0500 E QUERY [thread1] 错误:字符串中的十六进制字符无效:@(shell):1:34。道歉,错过了在我的原始剧本中注意到它们。转换它们有什么技巧吗?
    • @dilsingi 即使删除了连字符 that is not a valid value。您可以使用 .split().join() JavaScript 函数去除连字符。但数据确实需要有效。那不是。如果您有新问题,Ask a new Question
    猜你喜欢
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2018-08-02
    相关资源
    最近更新 更多