我正在尝试向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中执行此操作的正确方法是什么?
答案 0 :(得分:0)
事实证明,MongoCollection.find方法将允许UUID对象并且工作得很好。我忘了将Collection变量更改为指向实际拥有我感兴趣的数据的Collection。