当前位置: 首页 > 面试题库 >

如何使用Java驱动程序为MongoDB构建$ or查询?

戴浩初
2023-03-14
问题内容

我正在尝试或在MongoDB中使用某些条件(使用Java驱动程序)。这就是我在做什么:

Pattern regex = Pattern.compile("title");   
DBCollection coll = MongoDBUtil.getDB().getCollection("post_details");

BasicDBObject query = new BasicDBObject();
query.put("category_title", "myCategory");      
query.append("post_title", regex);  
query.append("post_description", regex);

DBCursor cur = coll.find(query);
while(cur.hasNext()) {
    System.out.println(cur.next().get("post_id"));
}

我想$or在这些条件下使用操作数,但是我想默认值是“和”,我不知道如何更改它。在上面的代码中,如果条件之一返回null,结果也将是null


问题答案:

您正确地说,在查询中指定多个字段的“默认”是每个字段都用作条件过滤器,因此是“与”运算。

您可以使用具有以下语法的$ or操作数,通过OR子句执行MongoDB查询:

db.col.find({$or:[clause1, clause2]})

每个子句可以是一个查询。$ or不必是顶级操作数,但是如果是$,则MongoDB可以为每个单独的子句使用索引。

在您的示例中,您要结束此查询:

db.col.find({$or:[{"post_title", regex}, {"post_description", regex}]});

可以通过以下方式用Java构造:

DBObject clause1 = new BasicDBObject("post_title", regex);  
DBObject clause2 = new BasicDBObject("post_description", regex);    
BasicDBList or = new BasicDBList();
or.add(clause1);
or.add(clause2);
DBObject query = new BasicDBObject("$or", or);


 类似资料:
  • 通过使用MongoDB和Java驱动程序,我有一个用户集合,我想根据他们的ObjectId进行查询(总体情况:我从ObjectId推断出对象的创建时间戳)。 问题是,用ObjectId查询似乎不起作用:我总是没有结果。为了测试的目的,我在搜索查询中硬编码了数据库中现有用户的ObjectId,只是为了确保我能得到结果: {“_id”:ObjectId(“565ef85ee4b0a4db3c2fc96

  • 如何在mongo db中创建一个可以公开集合中所有文档的视图?我使用了以下代码: 我正在尝试用管道空列表,但它不工作。你能帮忙吗?

  • 我使用下面的mongo查询来获取最高温度。有人能帮助我们如何使用mongo java驱动程序,使用和在java中实现吗?

  • 我正在尝试使用MongoDBJava驱动程序作为聚合命令的一部分创建查询。目前我允许日期范围或特定日期数组作为参数。例如 日期范围查询工作正常,我解析xml并将其转换为在mongo中生成以下查询的DBObject; 对于指定日期,我只想返回在给定日期的00:00:00.000和第二天的00:00:00.000之间发生的结果。根据我对mongo查询的基本了解,我希望做一个类似于日期范围的$匹配,但是

  • 问题内容: 我正在尝试通过搜索“ _id”键在MongoDB中查找文档。我的文件看起来像这样- 我正在尝试将此文档搜索为- 但我得到以下错误- BasicDBObject的append方法支持(字符串键,值),如果我将“ _id”作为String传递给此方法,则不会匹配任何文档。 所以我的问题是如何传递“ _id”? 问题答案: 通过使用as作为查询来解决

  • 我想看看mongo java驱动程序产生了什么查询,但我不能这样做。 使用官方文档中的信息,我只能在日志中看到更新操作执行的情况,但没有看到该操作的查询。