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

标签 java mongodb

将 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/

相关文章:

java - Vaadin Java 与 Apache Tomcat

java - CRUD 应用程序中推送值错误

mongodb java插入嵌入式文档

java - 根据运行时条件启用Aspect代理,Spring AOP?

java - 如何检查参数是否为 varArgs

java - 要求用户在java中输入有效的命令

mongodb - $或$内的$和$ filter条件不起作用

mongodb - 搜索实现 : ElasticSearch vs MongoDB vs Relational Database

mongodb - 如何防止MongoDB在查找文档时返回对象ID?

json - 如何将 JSON 数组保存到 mongodb 集合中