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)
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.如果没有,用什么驱动程序来创建数据?
您可以在查询前使用以下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文件中并在进行查询之前加载或打开它,如果从结果中复制该值,则应使用以下命令重命名该函数: