如何将mongdb UUID()转换为字符串?

14
我想生成一个随机的UUID字符串,并将其插入到Mongo集合中。我该怎么做?我不想要十六进制,我需要破折号。我尝试了UUID().toString(),但似乎不起作用。

我假设您想使用提供的uuid查询特定文档,是这样吗? - abhinav
@abhinav,是的。该值需要是GUID字符串(36个字符),因为遗留数据采用此格式。 - ProgrammerNeo
除非有更好的答案,否则这就是我想出来的。显然,toString()将其转换为字符串,但保留了UUID()方法名称包装,所以我的hack是.... UUID().toString().split('UUID(').join("").split(')').join("") - ProgrammerNeo
3个回答

18

我能够使这个工作起来的唯一方法是使用

UUID()
  .toString('hex')
  .replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, '$1-$2-$3-$4-$5')

当我尝试使用UUID().hex()时会出现UUID().hex不是函数的错误提示,而UUID().toString()只返回了一堆乱码。


2
这是在Mogosh中执行的方法。所有其他方法都会返回乱码编码。 - Chrissi Grilus
1
在 Studio 3T 升级到使用新的 shell 1.5.4 后,我们改用了上述方法。之前的方法 UUID().toString().split('"')[1] 可以正常工作。 - Siraj K

12
根据您的评论,UUID().toString() 包括方法名称。您的解决方案包括引号。要去掉这些引号,您可以使用以下代码: UUID().toString().split('"')[1] 说明:
  • UUID().toString() 将返回一个包含 UUID("00000000-0000-0000-0000-00000000000") 的字符串。
  • split('"') 会将该字符串拆分成数组,以引号为分隔符,得到一个数组:['UUID(', '00000000-0000-0000-0000-000000000000', ')']
  • [1] 选择该数组中的第二个元素,即 UUID 字符串。

6
对我来说不起作用...例如,操作UUID().toString()给了我l�X�N��� ��B - cactuschibre
@cactuschibre 很有趣。你用什么shell来获得这个响应?我的是mongo v4.0.3。它会输出以下内容:> UUID() UUID("a75cae57-a016-4142-ae1e-2197a093f763") > UUID().toString() UUID("9bc2a799-be68-46ac-bee3-53e5eae7f853") - Jeroen van Montfort
4
我找到了。db.version()给我的结果是3.4.2。我用UUID().hex().toString()成功地将UUID()转换成字符串。 - cactuschibre
2
@cactuschibre 你的评论会得到类似于 bf7151f190df40f4be6eb5bd13388be5 的内容,但这并不是所要求的格式,即缺少“-”破折号。 - Hendy Irawan

-2
要在Mongo DB shell中生成字符串形式的uuid,您需要以以下方式调用uuid()。首先使用require语句导入uuid/v4库(require语句也适用于mongo shell)。
const uuid = require('uuid/v4');

print(uuid());

// output : "df5679ea-34bf-48c0-9e9c-8c92686a7f56"


db.users.insert({name: "username", uuid: uuid()});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接