如何在mongodb shell查询中使用guid

时间:2011-04-13 15:56:56

标签: shell mongodb guid

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

以下格式不起作用:

>db.person.find({"_id","E3E45566-AFE4-A564-7876-AEFF6745FF"});

感谢。

3 个答案:

答案 0 :(得分:21)

您可以轻松使用:

.find({ "_id" : CSUUID("E3E45566-AFE4-A564-7876-AEFF6745FF")})

答案 1 :(得分:14)

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

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

  

hex:“E3E45566-AFE4-A564-7876-AEFF6745FF00”(忽略破折号)

     

base64:“ZlXk4 + SvZKV4dq7 / Z0X / AA ==”

所以你的查询应该是:

  

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

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

答案 2 :(得分: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"});

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

  • 旧版UUID的LUUID
  • JUUID for Java encoding
  • NUUID for .net encoding
  • 用于c#编码的CSUUID
  • 用于python编码的PYUUID