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进行正则表达式。
提前致谢。
答案 0 :(得分:0)
您可以使用MongoDB的$exists
运算符。
在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) )
)
)