【问题标题】:How to query MongoDB for the id of a document and then use that id in a new query using java如何在 MongoDB 中查询文档的 id,然后在使用 java 的新查询中使用该 id
【发布时间】:2018-06-20 04:56:01
【问题描述】:

我正在尝试在 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 中执行此操作的正确方法是什么?

【问题讨论】:

  • 类似customerId = new Binary((byte) 3, mongoDoc.get("_id").getBytes());
  • 事实证明 MongoCollection.find 方法将允许 UUID 对象并且工作得很好。我忘记将 Collection 变量更改为指向实际包含我感兴趣的数据的 Collection。

标签: java mongodb


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 2014-11-15
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    相关资源
    最近更新 更多