Moi*_*nGK 35 java mongodb mongodb-query mongo-java-driver
我正在尝试使用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"));
}
Run Code Online (Sandbox Code Playgroud)
我想$or在这些条件下使用操作数,但我猜默认是"和",我不知道如何更改它.在上面的代码中,如果其中一个条件返回null,结果也是null如此.
Rem*_*iet 73
您是正确的,在查询中指定多个字段的"默认"是每个字段用作条件过滤器,因此是AND操作.
您可以使用具有以下语法的$或操作数,使用OR子句执行MongoDB查询:
db.col.find({$or:[clause1, clause2]})
Run Code Online (Sandbox Code Playgroud)
其中每个子句都可以是查询.$或者不必是顶级操作数,但如果是MongoDB则可以为每个单独的子句使用索引.
在您的示例中,您希望最终得到此查询:
db.col.find({$or:[{"post_title", regex}, {"post_description", regex}]});
Run Code Online (Sandbox Code Playgroud)
可以通过以下方式构建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);
Run Code Online (Sandbox Code Playgroud)
使用过滤器,您可以构建如下:
import com.mongodb.client.model.Filters;
...
Bson filter = Filters.or(
Filters.eq("post_title", regex),
Filters.eq("post_description", regex)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32784 次 |
| 最近记录: |