有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正试图在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操作数,但我猜默认值是“and”,我不知道如何更改它。在上面的代码中,如果其中一个条件返回null,结果也将是null


共 (2) 个答案

  1. # 1 楼答案

    有了filters你可以像这样构建自己的:

    import com.mongodb.client.model.Filters;
    ...
    
    Bson filter = Filters.or(
                        Filters.eq("post_title", regex), 
                        Filters.eq("post_description", regex)
                      );
    
  2. # 2 楼答案

    正确的是,在查询中指定多个字段的“默认值”是每个字段充当条件过滤器,因此是and操作

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

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

    其中每个子句都可以是一个查询$或者不必是顶级操作数,但如果是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);