mongoTemplate的标准

时间:2015-02-10 13:13:13

标签: java spring mongodb

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进行正则表达式。

提前致谢。

1 个答案:

答案 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) )
  )
)