MongoDB:使用Java驱动程序按ObjectId查询
使用MongoDB和Java驱动程序,我有一个集合用户,我想根据他们的ObjectId进行查询(总体情况:我从ObjectId推断对象的创建时间戳) 问题是,通过ObjectId查询似乎不起作用:我总是得不到任何结果。 出于测试目的,我在搜索查询中硬编码了数据库中现有用户的ObjectId,只是为了确保获得结果: { “_id”:ObjectId(“565EF85EE4B0A4DB3C2C96B”),…} 尽管如此,我从未得到任何结果 以下是我尝试构建查询的方法,以及所创建查询的打印输出: 一, 查询:{“\u id”:“565ef85ee4b0a4db3c2fc96b”} 二, 查询:{“\u id”:{“$oid”:“565ef85ee4b0a4db3c2fc96b”} 三, 查询:{“\u id”:“565ef85ee4b0a4db3c2fc96b”} 四, 查询:{“\u id”:{“$oid”:“565ef85ee4b0a4db3c2fc96b”} 五, 查询:{“\u id”:{“$gte”:{“$oid”:“565EF85EE4B0A4DB3C2C96B”}} 我的应用程序部署在OpenShift上,我在RockMongo GUI中手动尝试了查询;我得到了同样的空结果。 但是,如果我手动搜索{“_id”:ObjectId(“565ef85ee4b0a4db3c2fc96b”)},我会得到正确的结果 我的问题是:如何正确构建查询以使其工作MongoDB:使用Java驱动程序按ObjectId查询,java,mongodb,Java,Mongodb,使用MongoDB和Java驱动程序,我有一个集合用户,我想根据他们的ObjectId进行查询(总体情况:我从ObjectId推断对象的创建时间戳) 问题是,通过ObjectId查询似乎不起作用:我总是得不到任何结果。 出于测试目的,我在搜索查询中硬编码了数据库中现有用户的ObjectId,只是为了确保获得结果: { “_id”:ObjectId(“565EF85EE4B0A4DB3C2C96B”),…} 尽管如此,我从未得到任何结果 以下是我尝试构建查询的方法,以及所创建查询的打印输出: 一,
或者,如何让Java驱动程序生成ObjectId(“…”,而不是{“$oid”:“…”}?下面的代码片段显示了如何通过
\u id
查询Mongo集合。请注意,{“$oid”:“}
严格等同于ObjectId(“”
)。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;
}
我更喜欢@ImbaBalboa的这种款式
正如我在文章中所描述的,这就是我在测试2中所做的。查询未返回任何结果。这表明存在其他问题。没有筛选器的
findOne
查询是否返回任何结果?不,调用findOne()时我没有得到任何结果。但是,对users集合的查询使用ObjectId以外的字段,并像collection.find(查询)一样调用,将返回正确的结果。Mongo实际运行的是什么查询?你能用扩展日志启动mongod进程吗?解决了它——当我看到find()和findOne()的问题时,我仔细检查了代码,其中一个确实使用了错误的集合名称(“user”和“users”)。所以,佩布卡克再次:-)谢谢!
BasicDBObject query = new BasicDBObject();
query.put("_id", new ObjectId("565ef85ee4b0a4db3c2fc96b"));
BasicDBObject query = new BasicDBObject("_id", "565ef85ee4b0a4db3c2fc96b");
BasicDBObject query = new BasicDBObject("_id", new ObjectId("565ef85ee4b0a4db3c2fc96b"));
DBObject query = new BasicDBObject("_id",
BasicDBObjectBuilder.start("$gte", new ObjectId("565ef85ee4b0a4db3c2fc96b")).get());
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;
}
import static com.mongodb.client.model.Filters.eq;
import org.bson.Document;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
Document myDoc = collection.find(eq("_id", new ObjectId("565ef85ee4b0a4db3c2fc96b"))).first();