我正在使用Mongo .Net驱动程序在MongoDB中插入文档,并且需要使用Java驱动程序来获取文档。
我的模特:
public class Person{
public Guid Id {get;set;}
public Guid FatherId{get;set;}
public string Name{get;set;}
}
我正在使用以下C#代码将文档插入到MongoDb中。
var id= Guid.NewGuid();
Persons.InsertOne(new Person(){Id = id,Name = "Joe"});
现在,有了ID,如何使用Mongo Java驱动程序找到相同的文档? 我尝试过:
Person person=Persons.find(eq("_id", id))).first();
但是我没有得到任何结果,我已经对其进行了研究,似乎id应该在使用find之前转换为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();
那还是没用。
答案 0 :(得分:0)
供其他参考,基于answer,以下内容对我有用:
首先将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);
}