Mongodb将.Net GUID转换为Java中的BinData

时间:2018-07-31 06:58:51

标签: 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中。

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();

那还是没用。

1 个答案:

答案 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);
}