BasicQuery query = new BasicQuery("{}");
query.addCriteria(Criteria.where(FaceFields.isValid).is(true)
.orOperator(
Criteria.where(FaceFields.FIRSTNAME).regex(q),
Criteria.where(FaceFields.LASTNAME).regex(q),
Criteria.where(FaceFields.MIDDLENAME).regex(q)
)
);这是查询,我想使用它,以获得用户。如果所有字段都存在于文档中,则工作正常。否则会抛出NullPointerException。如何更改此查询,以检查某些字段是否不存在,并且不应通过q进行正则化。
提前谢谢。
发布于 2015-02-10 20:27:25
您可以使用$exists运算符MongoDB。
在Java中,应该像这样使用它:
Criteria.where("myField").exists(true)MongoDB的$and算子使用短路评估:http://docs.mongodb.org/manual/reference/operator/query/and/
“如果第一个表达式(例如expression1)计算为false,MongoDB将不计算其余表达式。”
尽管应该可以这样做(伪代码查询):
WHERE (
( isValid = true )
AND (
( EXISTS(firstname, true) AND REGEXP(firstname, q) )
OR
( EXISTS(lastname, true) AND REGEXP(lastname, q) )
OR
( EXISTS(middlename, true) AND REGEXP(middlename, q) )
)
)https://stackoverflow.com/questions/28432593
复制相似问题