我在Spring中使用MongoDB。我想通过_id查询数据库。
目前我有这个问题:
Query q = new Query(Criteria.where("_id").is(someId).and("deleted").is(false));
但这不知何故给了我StackOverflowError。这个查询有什么问题?或者更好的方法是什么?
答案 0 :(得分:3)
使用 $and
运算符Criteria.andOperator()
为所有提供的条件创建显式AND查询而不是链接查询,如下所示:
Query q = new Query(
new Criteria().andOperator(
Criteria.where("_id").is(someId),
Criteria.where("deleted").is("false")
)
);
这通常用于您无法使用Criteria.and()
将多个条件添加到同一字段的情况,例如
Query q = new Query();
q.addCriteria(Criteria.where("age").lt(40).and("age").gt(10));
会抛出错误,因此解决方法是使用Criteria.andOperator()
作为
Query q = new Query();
q.addCriteria(
Criteria.where("age").exists(true).andOperator(
Criteria.where("age").gt(10),
Criteria.where("age").lt(40)
)
);