如何在mongodb shell查询中使用guid

如何在mongodb shell查询中使用guid,shell,mongodb,guid,Shell,Mongodb,Guid,在使用MongoDB shell时,如何使用guid数据类型(在集合中用作_id) 以下格式不起作用: >db.person.find({"_id","E3E45566-AFE4-A564-7876-AEFF6745FF"}); 谢谢。您必须将_id值与BinData实例(而不是字符串)进行比较。不幸的是,BinData构造函数采用Base64字符串而不是十六进制字符串 您的GUID值末尾缺少两个十六进制数字,因此在本例中,我假设它们是“00”。以下值等效: 十六进制:“E3E45566

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

以下格式不起作用:

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

谢谢。

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

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

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

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

因此,您的查询应该是:

>db.person.find({u id:newbindata(3,“ZlXk4+SvZKV4dq7/Z0X/AA==”))

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

您可以轻松使用:

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

您可以在查询前使用以下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
  • 用于Java编码的JUID
  • net编码的NUUID
  • c#编码的CSUUID
  • python编码的PYUUID

哦,天哪,这不是很人性化,是吗!我将从MSSQL中水合MongoDB,使用现有的GUI作为键,并时不时地运行spot查询。我想我必须想出一个简单的方法来手动将十六进制guid转换为base64。谢谢你的帮助!我知道。。。我试图找到一个Javascript函数,将十六进制字符串转换为Base64字符串,但该语言似乎没有内置函数。您可以搜索人们为此编写的函数。或者你可以用C#而不是Javascript编写导入程序来将GUID转换为base64字符串:
convert.ToBase64String(GUID.NewGuid().ToByteArray())
是的,这是不使用GUID的一个很好的理由,希望我在任何地方使用GUID之前都考虑过。你可以把你的ID作为字符串,或者任何你想要的类型。Mongo默认使用OID(二进制),但这不是必需的。CSUUID在Mongo中不是“标准”。您需要从csharpdriver获取文件,并在启动shell时包含它。更多信息请点击这里:谢谢。就易用性而言,这是迄今为止最好的答案。没有BinData和base64的复杂性!