通过使用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”:“…”}?
我更喜欢@ImbaBalboa answer中的这种风格
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();
下面的代码片段显示了如何通过_id
查询Mongo集合。请注意{"$id":"
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;
}
谁能帮我用mongojack java驱动程序在mongodb子文档上为条件编写等效的查询 db.parentdocs.find({“subdoc._id”:ObjectId(“542d916a18ee9cfa2daeae15”)}) 这里subdoc是parentdoc文档中的一个子文档。我可以使用其他属性查询,但不能使用id BasicDBObject查询=新的BasicDBObject();
请帮我找到一个合适的解决办法 收集被存储的用户详细信息app_users 用户预订是存储预订的集合 我正在使用的查找(左连接)查询是 我想从用户集合中选择具有相应用户详细信息的预订,但返回为空,因为mongodb正在将字符串与objectId进行比较,所以是否有方法执行此任务?
我使用下面的mongo查询来获取最高温度。有人能帮助我们如何使用mongo java驱动程序,使用和在java中实现吗?
我正在尝试使用MongoDBJava驱动程序作为聚合命令的一部分创建查询。目前我允许日期范围或特定日期数组作为参数。例如 日期范围查询工作正常,我解析xml并将其转换为在mongo中生成以下查询的DBObject; 对于指定日期,我只想返回在给定日期的00:00:00.000和第二天的00:00:00.000之间发生的结果。根据我对mongo查询的基本了解,我希望做一个类似于日期范围的$匹配,但是
问题内容: 我们当前的连接配置如下所示: 并且已在当前版本(源代码)中弃用,并将被删除:“此方法无法替代。使用connectTimeout属性控制连接超时。” 我认为重试和连接超时是两回事。有谁知道为什么改变了它以及它有什么(内部)含义? 问题答案: 关于autoConnectRetry的含义有很多困惑。大多数人认为这意味着,如果操作由于IOException而失败,驱动程序将重试该操作,直到ma
我试图在MongoDB\驱动程序\查询中使用选项: 如果$选项似乎可以: --------$options: 数组([排序]= $query没有给我好的选项: 限制和批量大小不等于20,为什么?请问怎么办? 提前感谢