使用MongoDB shell時,如何使用guid數據類型(在我的集合中用作_id)。如何在MongoDB shell查詢中使用guid
以下格式不起作用:
>db.person.find({"_id","E3E45566-AFE4-A564-7876-AEFF6745FF"});
感謝。
使用MongoDB shell時,如何使用guid數據類型(在我的集合中用作_id)。如何在MongoDB shell查詢中使用guid
以下格式不起作用:
>db.person.find({"_id","E3E45566-AFE4-A564-7876-AEFF6745FF"});
感謝。
您必須將_id值與BinData實例(不針對字符串)進行比較。不幸的是,BinData構造函數使用Base64字符串而不是十六進制字符串。
您的GUID值末尾缺少兩個十六進制數字,因此就本例而言,我將假設它們爲「00」。下面的值是相同的:
hex: "E3E45566-AFE4-A564-7876-AEFF6745FF00" (ignoring dashes)
base64: "ZlXk4+SvZKV4dq7/Z0X/AA=="
所以您的查詢應該是:
>db.person.find({_id : new BinData(3, "ZlXk4+SvZKV4dq7/Z0X/AA==")})
我假設如果沒有,用什麼驅動程序來創建數據的二進制亞型正確設置爲3。 ?
您可以輕鬆地使用:
.find({ "_id" : CSUUID("E3E45566-AFE4-A564-7876-AEFF6745FF")})
CSUUID在mongo中不是「標準」。您需要從csharpdriver獲取文件,並在啓動shell時將其包含在內。關於這方面的更多信息:http://stackoverflow.com/a/8252047/111625 – 2012-06-27 14:58:10
您可以使用下面的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文件的功能並加載它或在進行查詢之前將其打開,如果從結果中複製值,則應重新命名該函數:
哦,親愛的,那不是很人性化的就是它了!我將通過使用現有的guid作爲密鑰來保護MSSQL中的MongoDB,並且不時地運行現場查詢。我想我只需要找出一種簡單的方法來手動將hex guid轉換爲base64。謝謝你的幫助! – Journeyman 2011-04-13 17:39:07
我知道......我試圖找到一個Javascript函數,它可以將一個十六進制字符串轉換爲一個Base64字符串,但似乎並沒有內置到該語言中。你可以搜索人們爲此寫的功能。或者你可以用C#代替Javascript編寫你的導入程序? – 2011-04-13 17:54:57
要將GUID轉換爲base64字符串:'Convert.ToBase64String(Guid.NewGuid()。ToByteArray())' – 2011-06-03 01:04:37