gpt4 book ai didi

java - MongoDB:使用 Java 驱动程序按 ObjectId 查询

转载 作者:可可西里 更新时间:2023-11-01 10:03:20 25 4
gpt4 key购买 nike

将 MongoDB 与 Java 驱动程序结合使用,我有一个集合用户,我想根据他们的 ObjectId 进行查询(大图:我从 ObjectId 推断到对象的创建时间戳)。

问题是,按ObjectId 查询似乎不起作用:我总是得不到结果。出于测试目的,我在搜索查询中硬编码了数据库中现有用户的 ObjectId,以确保我应该得到结果:

{ "_id": ObjectId("565ef85ee4b0a4db3c2fc96b"), ... }

仍然,我从未得到任何结果。

这些是我尝试构建查询的方式,以及所创建查询的打印输出:

1.

BasicDBObject query = new BasicDBObject();
query.put("_id", "565ef85ee4b0a4db3c2fc96b");

查询:{ "_id": "565ef85ee4b0a4db3c2fc96b"}

2.

BasicDBObject query = new BasicDBObject();
query.put("_id", new ObjectId("565ef85ee4b0a4db3c2fc96b"));

查询:{ "_id": { "$oid": "565ef85ee4b0a4db3c2fc96b"}}

3.

BasicDBObject query = new BasicDBObject("_id", "565ef85ee4b0a4db3c2fc96b");

查询:{ "_id": "565ef85ee4b0a4db3c2fc96b"}

4.

BasicDBObject query = new BasicDBObject("_id", new ObjectId("565ef85ee4b0a4db3c2fc96b"));

查询:{ "_id": { "$oid": "565ef85ee4b0a4db3c2fc96b"}}

5.

DBObject query = new BasicDBObject("_id", 
BasicDBObjectBuilder.start("$gte", new ObjectId("565ef85ee4b0a4db3c2fc96b")).get());

查询:{ "_id": { "$gte": { "$oid": "565ef85ee4b0a4db3c2fc96b"}}}

我的应用程序部署在 OpenShift 上,我在 RockMongo GUI 中手动尝试查询;我得到同样的空结果。但是,如果我手动搜索 { "_id": ObjectId("565ef85ee4b0a4db3c2fc96b")},我会得到正确的结果。

我的问题是:如何才能正确构建查询以使其正常工作?

或者,如何让 Java 驱动程序生成 ObjectId("...") 而不是 {"$oid": "..."}强> ?

最佳答案

下面的代码片段显示了如何通过 _id 查询 Mongo 集合.请注意 { "$oid": "<id>" }严格等价于 ObjectId( "<id>" ) . BSON 类型的严格模式表示符合 JSON RFC 并允许任何 JSON 解析器将这些严格模式表示处理为键/值对。

import org.bson.types.ObjectId;

public DBObject findDocumentById(String id) {
BasicDBObject query = new BasicDBObject();
query.put("_id", new ObjectId(id));
DBObject dbObj = collection.findOne(query);
return dbObj;
}

关于java - MongoDB:使用 Java 驱动程序按 ObjectId 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34064208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com