Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 来自Mongo shell的Mongo UUID类型03而不是04_Mongodb_Mongodb Query_Mongo Shell - Fatal编程技术网

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

Mongodb 来自Mongo shell的Mongo UUID类型03而不是04,mongodb,mongodb-query,mongo-shell,Mongodb,Mongodb Query,Mongo Shell,来自MongoShell的MongoDB UUID转换结果是03类型,传统格式。我们如何让它与类型04,二进制格式一起工作 > db.foo.insert({"_id":1000,"key1":UUID("240003A09CEC456AB57B98FF8E0E45DB")}) WriteResult({ "nInserted" : 1 }) > db.foo.find({_id:1000}) { "_id" : 1000, "key1" : BinData(3,"JAADo

来自MongoShell的MongoDB UUID转换结果是03类型,传统格式。我们如何让它与类型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==”)

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

var t = BinData(4, UUID("240003a09cec456ab57b98ff8e0e45db").base64())
BinData(4,"JAADoJzsRWq1e5j/jg5F2w==")
然后您仍然可以从hex获得提供的值:

t.hex()
240003a09cec456ab57b98ff8e0e45db
或者直接提供给
HexData()

如果数据中有连字符,请使用和重新格式化:

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

存在JIRA票证,使
UUID()
生成类型4作为默认值,但这是一个低优先级问题。对于一般用途,您的交互应该是基于“驱动程序”的。但是有这些方法可以使用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-0500E查询[thread1]错误:字符串中的十六进制字符无效:@(shell):1:34。我道歉了,没注意到我原来的剧本。迪尔辛基甚至在连字符被删除的情况下,还能用什么技巧来转换它们呢。您可以使用
.split()
.join()
JavaScript函数去除连字符。但数据必须是有效的。事实并非如此。如果你有一个新问题
var str =  "240003A0-9CEC-456A-b57B-98FF8e0E45DB";
str.split('-').join("").toLowerCase();
"240003a09cec456ab57b98ff8e0e45db"