2017-10-11 12 views
0

各コレクション内の各ドキュメントに.net GUIDの_idフィールドがあるmongodbデータベースがあります。今度は、Javaアプリケーションから同じデータベースを使用したいと考えています。 GUIDをUUIDに変換してオブジェクトを正しくマップする方法Java GUIDをJAVA UUIDでmongodbコレクションの主キーとして使用する方法

+0

guidはどのように表現されていますか?バイナリ128ビットBLOBまたはテキスト表現ですか? – Jens

+0

ここに私がrobomongoで見たものがありますNUUID( "d8576082-c1aa-41d5-a26e-a7c101487f1c") – Radislav

答えて

0

解決策が見つかりました。それが他の人を助けることを願っています。 私は、CSUUID変換のためのutil jsファイルのコードをrobomongoの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"); 

文字列表現の使用toStringにUUIDを変換する:

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

大文字/小文字(この例に見られるように)重要ではありません。

文書を照会する方法については、quickstartを参照してください。

+0

リプレイのおかげで!しかし、そのUUIDフィールドでmongodbにクエリを実行する方法は? – Radislav

+0

私は以下の正しい意見を投稿しました。別の簡単な解決策が分かっていれば教えてください。ご協力いただきありがとうございます! – Radislav

関連する問題