Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:使用Java驱动程序按ObjectId查询_Java_Mongodb - Fatal编程技术网

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

MongoDB:使用Java驱动程序按ObjectId查询,java,mongodb,Java,Mongodb,使用MongoDB和Java驱动程序,我有一个集合用户,我想根据他们的ObjectId进行查询(总体情况:我从ObjectId推断对象的创建时间戳) 问题是,通过ObjectId查询似乎不起作用:我总是得不到任何结果。 出于测试目的,我在搜索查询中硬编码了数据库中现有用户的ObjectId,只是为了确保获得结果: { “_id”:ObjectId(“565EF85EE4B0A4DB3C2C96B”),…} 尽管如此,我从未得到任何结果 以下是我尝试构建查询的方法,以及所创建查询的打印输出: 一,

使用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”)},我会得到正确的结果

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


或者,如何让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();