我有mongodb數據庫,其中每個集合中的每個文檔都有_id字段,它是.net GUID。現在我們要使用來自java應用程序的相同數據庫。如何將GUID轉換爲UUID並正確映射對象?如何在JAVA UUID中使用.net GUID作爲mongodb集合的主鍵
0
A
回答
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。
相關問題
- 1. guid作爲主鍵?
- 2. 使用.NET Guid作爲mongodb文檔ID
- 3. Android:使用UUID作爲SQLite的主鍵
- 4. 使用UUID作爲主鍵的Laravel 4
- 5. 使用bigint作爲非羣集鍵和guid/UNIQUEIDENTIFIER作爲主鍵非羣集
- 6. 使用INT或GUID作爲主鍵
- 7. 如何將GUID用作System.Data.Sqlite的主鍵
- 8. 如何使用UUID作爲Hibernate實體的主鍵?
- 9. 數據庫中的UUID或GUID作爲主鍵。我應該何時使用它,何時不應該使用它?
- 10. PostgreSQL:生成自定義的MongoDB-ObjectID-like UUID作爲主鍵
- 11. 作爲主鍵不工作的UUID Laravel
- 12. 如何使用OrmLite和Postgres將UUID作爲主鍵處理?
- 13. 在AppEngine中使用GUID作爲鍵名
- 14. 實現作爲主鍵的UUID
- 15. 作爲主鍵的GUID - 離線OLTP
- 16. 使用Java在MongoDB中插入集合。
- 17. 使用UUID作爲在軌和多晶型關係的主鍵
- 18. 當我在MySQL中使用UUID作爲主鍵時,如何影響性能
- 19. 使用複合主鍵作爲外鍵
- 20. 在Java中使用HashMap作爲集合
- 21. 如何使用iPhone SDK創建GUID/UUID
- 22. 如何在MongoDB中使用集合?
- 23. 自定義UUID作爲主鍵
- 24. MongoDB和複合主鍵
- 25. PHP中的Guid/Uuid使用MySQL
- 26. 使用VBA和ADO創建MDB表,如何自動使用UUID作爲主鍵?
- 27. 如何擺脫作爲主鍵的guid字段
- 28. 使用C#Guid作爲唯一的非主鍵字段
- 29. 使用主鍵或Guid作爲圖像的名稱
- 30. 在OpenOffice.org Base中使用UUID
guid是如何表示的?一個二進制128位blob或作爲文本表示? – Jens
以下是我在robomongo NUUID中看到的內容(「d8576082-c1aa-41d5-a26e-a7c101487f1c」) – Radislav