2017-10-11 28 views
0

我有mongodb數據庫,其中每個集合中的每個文檔都有_id字段,它是.net GUID。現在我們要使用來自java應用程序的相同數據庫。如何將GUID轉換爲UUID並正確映射對象?如何在JAVA UUID中使用.net GUID作爲mongodb集合的主鍵

+0

guid是如何表示的?一個二進制128位blob或作爲文本表示? – Jens

+0

以下是我在robomongo NUUID中看到的內容(「d8576082-c1aa-41d5-a26e-a7c101487f1c」) – Radislav

回答

0

我找到了解決辦法。希望它能幫助別人。 因此,我將util js文件的代碼用於robomongo中的CSUUID轉換爲UUID,並將其重寫爲JAVA。

private String HexToBase64(String hex) { 
     char[] base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/".toCharArray(); 
     String base64 = ""; 
     int group;  
     for (int i = 0; i < 30; i += 6) { 
      group = Integer.parseInt(mySubString(hex, i, 6), 16); 
      base64 += base64Digits[(group >> 18) & 0x3f]; 
      base64 += base64Digits[(group >> 12) & 0x3f]; 
      base64 += base64Digits[(group >> 6) & 0x3f]; 
      base64 += base64Digits[group & 0x3f]; 
     } 
     group = Integer.parseInt(mySubString(hex, 30, 2), 16); 
     base64 += base64Digits[(group >> 2) & 0x3f]; 
     base64 += base64Digits[(group << 4) & 0x3f]; 
     base64 += "=="; 
     return base64; 
    } 
    private String mySubString(String myString, int start, int length) { 
     return myString.substring(start, Math.min(start + length, myString.length())); 
    } 
    private String CSUUID(String csuuid) { 
     String hex = csuuid.replaceAll("[{}-]", ""); // remove extra characters 
     String a = mySubString(hex, 6, 2) + mySubString(hex, 4, 2) + mySubString(hex, 2, 2) + mySubString(hex, 0, 2); 
     String b = mySubString(hex, 10, 2) + mySubString(hex, 8, 2); 
     String c = mySubString(hex, 14, 2) + mySubString(hex, 12, 2); 
     String d = mySubString(hex, 16, 16); 
     hex = a + b + c + d; 
     String base64 = HexToBase64(hex);    
     //return base64.getBytes(StandardCharsets.UTF_8); 
     return base64; 
    } 

現在,通過CSUUID執行查詢需要執行這樣的查詢:

var user = _mongo.findOne(Query.query(Criteria.where("_id").is(new Binary(Bytes.B_UUID, Base64.getDecoder().decode(CSUUID(id.toString()))))), User.class); 

謝謝!

1

Java UUID和Mongodb UUID都實現了UUID standard

該文本表示可以用例如, fromString

UUID myUUID = UUID.fromString("449772DE-2780-4412-B9F7-E49E48605875"); 

要將UUID轉換成字符串表示使用toString

String uuid = myUUID.toString(); 
// gives "449772de-2780-4412-b9f7-e49e48605875" 

大寫/小寫不要緊(如在這個例子可以看出)。

關於如何查詢文檔,請參閱quickstart

+0

感謝您的重播!但如何通過該UUID字段對mongodb執行查詢? – Radislav

+0

我發佈了正確的下面。如果你知道另一個簡單的解決方案,請讓我知道。謝謝你的幫助! – Radislav