如何在MongoDB中查询文档的id,然后在使用java的新查询中使用该id

时间:2018-01-10 22:42:21

标签: java mongodb

我正在尝试向MongoDB查询一个文档的_id,然后在查询中将该_id用于其中一个字段中具有该id的另一个文档。

我在将id转换为MongoCollection.find方法允许的格式时遇到了麻烦。

现在,第一个查询中返回的_id如下所示:

Document{{_id=4be67619-9a9b-f550-be1b-6086e7038c86,...}}

在我的代码中我这样做:

Document mongoDoc = null;
UUID customerId = null;
BasicDBObject mongoQuery = new BasicDBObject();

第一个查询获取_id,在游标对象中我将_id捕获到这样的UUID对象:

while(cur.hasNext()) {
               mongoDoc = cur.next();
               customerId = (UUID) mongoDoc.get("_id");
           }

第二个查询如下所示:

mongoQuery.put("CustomerId", new ObjectId(customerId.toString()));

但是当我运行查询时,我得到了:

java.lang.IllegalArgumentException: invalid hexadecimal representation of an ObjectId: [4be67619-9a9b-f550-be1b-6086e7038c86]
at org.bson.types.ObjectId.parseHexString(ObjectId.java:550)
at org.bson.types.ObjectId.<init>(ObjectId.java:240)
at ngm.java.automation.MongoDbMethodsUnitTest.main(MongoDbMethodsUnitTest.java:61)

一个工作的mongo shell查询看起来像这样(我通过右键单击第一个查询中的_id值并选择复制文档来获取此值):

db.Customer.find({ 
"CustomerId" : BinData(3, "UPWbmhl25kuGjAPnhmAbvg==")
});

Studio 3T表示Java版应该如下:

query.append("CustomerId", new Binary((byte) 3, new byte[] { 80, -11, -101, -102, 25, 118, -26, 75, -122, -116, 3, -25, -122, 96, 27, -66 }));

但是我不确定如何将UUID转换为二进制3,也不确定这是否真的是正确的做法才能使其工作。

在Java中执行此操作的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

事实证明,MongoCollection.find方法将允许UUID对象并且工作得很好。我忘了将Collection变量更改为指向实际拥有我感兴趣的数据的Collection。