【问题标题】:Mongodb Convert .Net GUID to BinData in JavaMongodb 在 Java 中将 .Net GUID 转换为 BinData
【发布时间】:2018-07-31 18:54:27
【问题描述】:

我正在使用 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();

但我没有得到任何结果,我已经研究过了,似乎在使用 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();

还是不行。

【问题讨论】:

    标签: java c# mongodb


    【解决方案1】:

    供其他人参考,基于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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      相关资源
      最近更新 更多