Mongodb在Java中将.Net GUID转换为BinData
我正在使用Mongo.Net驱动程序在MongoDB中插入文档,我需要使用Java驱动程序获取文档 我的模型:Mongodb在Java中将.Net GUID转换为BinData,java,c#,mongodb,Java,C#,Mongodb,我正在使用Mongo.Net驱动程序在MongoDB中插入文档,我需要使用Java驱动程序获取文档 我的模型: public class Person{ public Guid Id {get;set;} public Guid FatherId{get;set;} public string Name{get;set;} } 我正在使用下面的C代码向MongoDb插入一个文档 现在,有了id,我如何使用Mongo Java驱动程序找到相同的文档? 我试过: 但我没有得到任何结果,我已经
public class Person{
public Guid Id {get;set;}
public Guid FatherId{get;set;}
public string Name{get;set;}
}
我正在使用下面的C代码向MongoDb插入一个文档
现在,有了id,我如何使用Mongo Java驱动程序找到相同的文档?
我试过:
但我没有得到任何结果,我已经研究过了,似乎在使用find之前应该将id转换为Base64
因此,我尝试了以下方法:
public String uuidToBase64(String str) {
java.util.Base64.Encoder encoder=Base64.getUrlEncoder();
UUID uuid = UUID.fromString(str);
ByteBuffer uuidBytes = ByteBuffer.wrap(new byte[16]);
uuidBytes.putLong(uuid.getMostSignificantBits());
uuidBytes.putLong(uuid.getLeastSignificantBits());
return encoder.encodeToString(uuidBytes.array());
}
Person person=Persons.find(eq("_id", BinData(3,uuidToBase64(id))))).first();
这仍然不起作用。对于其他参考,基于,以下内容对我有效: 首先将id转换为字符串类型
Document doc = mongoCollection
.find(eq("_id", new Binary((byte) 3, Base64.getDecoder().decode(uuidToBase64(id)))))
.first();
编码方法:
public static String uuidToBase64(String str) {
java.util.Base64.Encoder encoder=Base64.getEncoder();
UUID uuid = UUID.fromString(str);
ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
bb.putLong(uuid.getMostSignificantBits());
bb.putLong(uuid.getLeastSignificantBits());
byte[] java=bb.array();
byte[] net= new byte[16];
for (int i = 8; i < 16; i++) {
net[i] = java[i];
}
net[3] = java[0];
net[2] = java[1];
net[1] = java[2];
net[0] = java[3];
net[5] = java[4];
net[4] = java[5];
net[6] = java[7];
net[7] = java[6];
return encoder.encodeToString(net);
}
公共静态字符串uuidToBase64(字符串str){
java.util.Base64.Encoder编码器=Base64.getEncoder();
UUID UUID=UUID.fromString(str);
ByteBuffer bb=ByteBuffer.wrap(新字节[16]);
bb.putLong(uuid.getMostSignificantBits());
bb.putLong(uuid.getLeastSignificantBits());
字节[]java=bb.array();
字节[]净=新字节[16];
对于(int i=8;i<16;i++){
net[i]=java[i];
}
net[3]=java[0];
net[2]=java[1];
net[1]=java[2];
net[0]=java[3];
net[5]=java[4];
net[4]=java[5];
net[6]=java[7];
net[7]=java[6];
返回编码器.encodeToString(净);
}
Document doc = mongoCollection
.find(eq("_id", new Binary((byte) 3, Base64.getDecoder().decode(uuidToBase64(id)))))
.first();
public static String uuidToBase64(String str) {
java.util.Base64.Encoder encoder=Base64.getEncoder();
UUID uuid = UUID.fromString(str);
ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
bb.putLong(uuid.getMostSignificantBits());
bb.putLong(uuid.getLeastSignificantBits());
byte[] java=bb.array();
byte[] net= new byte[16];
for (int i = 8; i < 16; i++) {
net[i] = java[i];
}
net[3] = java[0];
net[2] = java[1];
net[1] = java[2];
net[0] = java[3];
net[5] = java[4];
net[4] = java[5];
net[6] = java[7];
net[7] = java[6];
return encoder.encodeToString(net);
}