mongodb使用and配合or查询

乐之者 / 2023-05-06 / 原文

使用mongodb时,有时需要使用and配合(嵌套)or查询。

实现类似以下sql的语句:

select * from MongoDbTest where status=1 and (userId="abc" or price>=2)

对应的 mongodb语句如下:

db.getCollection("mongoDbTest").find({ "status" : 1, "$and" : [{ "$or" : [{ "userId" : "abcd" }, { "price" : { "$gte" : 2 } }] }] })

代码示例如下:

/**
 * mongodb使用and配合or查询。
 * 以下相当于 sql:
 *  select * from MongoDbTest where status=1 and (userId="abc" or price>=2)
 */
public void andOrOperator() {
    Criteria criteria = Criteria.where("status").is(1);

    Criteria criteria1 = Criteria.where("userId").is("abc");
    Criteria criteria2 = Criteria.where("price").gte(2);
    Criteria criteria3 = new Criteria().orOperator(criteria1, criteria2);

    criteria.andOperator(criteria3);

    Query query = Query.query(criteria);
    List<MongoDbTest> list = mongoTemplate.find(query, MongoDbTest.class);
    System.out.println("MongoDbTest list:" + JSON.toJSONString(list));
}