如何在mongodb shell查询中使用guid

Jou*_*man 23 shell guid mongodb

使用MongoDB shell时,如何使用guid数据类型(我在我的集​​合中用作_id).

以下格式不起作用:

>db.person.find({"_id","E3E45566-AFE4-A564-7876-AEFF6745FF"});
Run Code Online (Sandbox Code Playgroud)

谢谢.

Edw*_*ert 23

你可以轻松使用:

.find({ "_id" : CSUUID("E3E45566-AFE4-A564-7876-AEFF6745FF")})
Run Code Online (Sandbox Code Playgroud)

  • CSUUID在mongo中不是"标准".你需要从csharpdriver获取文件并在启动shell时包含它.有关详细信息,请访问:http://stackoverflow.com/a/8252047/111625 (4认同)

Rob*_*tam 14

您必须将_id值与BinData实例(而不是字符串)进行比较.不幸的是,BinData构造函数采用Base64字符串而不是十六进制字符串.

您的GUID值在末尾缺少两个十六进制数字,因此出于本示例的目的,我将假设它们是"00".以下值是等效的:

十六进制: "E3E45566-AFE4-A564-7876-AEFF6745FF00"(忽略破折号)

base64:"ZlXk4 + SvZKV4dq7/Z0X/AA =="

所以你的查询应该是:

> db.person.find({_ id:new BinData(3,"ZlXk4 + SvZKV4dq7/Z0X/AA ==")})

我假设二进制子类型被正确设置为3.如果没有,用什么驱动程序来创建数据?

  • 将GUID转换为base64字符串:`Convert.ToBase64String(Guid.NewGuid().ToByteArray())` (3认同)
  • 哦,亲爱的,这不是非常人性化的!我将从MSSQL中使用现有的guid作为键来保护MongoDB,并且偶尔运行点查询.我想我只需要弄清楚一种简单的方法来手动将hex guids转换为base64.谢谢你的帮助! (2认同)

Tod*_*odd 9

您可以在查询前使用以下js函数,如下所示:

function LUUID(uuid) {
    var hex = uuid.replace(/[{}-]/g, ""); // removes extra characters
    return new UUID(hex); //creates new UUID
}

db.person.find({"_id" : LUUID("E3E45566-AFE4-A564-7876-AEFF6745FF"});
Run Code Online (Sandbox Code Playgroud)

您可以将该函数保存在.js文件中并在进行查询之前加载或打开它,如果从结果中复制该值,则应使用以下命令重命名该函数:

  • 传统UUID的LUUID
  • JUUID for Java编码
  • NUUID for .net编码
  • 用于c#编码的CSUUID
  • 用于python编码的PYUUID