因此Criteria
中有getCriteriaObject
,它返回Document
,然后您可以对文档进行一些操作,但是随后我想通过转换回Criteria
来使用结果,我无法真的找不到方法。
当然,我们考虑具有多个运算符等的复杂Criteria
。有什么想法吗?
Criteria
具有Querydsl -like语法,它允许生成type-safe查询。从Document
读取可能会为当前的MongoDB版本引入MongoDB不兼容的命令或语法。
walkaround,以将文档key:value
添加到条件private
字段中。警告:您假定Document
具有兼容的运算符,且语法正确。
public static Criteria from(Document document) {
Criteria c = new Criteria();
try {
Field _criteria = c.getClass().getDeclaredField("criteria");
_criteria.setAccessible(true);
@SuppressWarnings("unchecked")
LinkedHashMap<String, Object> criteria = (LinkedHashMap<String, Object>) _criteria.get(c);
for (Entry<String, Object> set : document.entrySet()) {
criteria.put(set.getKey(), set.getValue());
}
Field _criteriaChain = c.getClass().getDeclaredField("criteriaChain");
_criteriaChain.setAccessible(true);
@SuppressWarnings("unchecked")
List<Criteria> criteriaChain = (List<Criteria>) _criteriaChain.get(c);
criteriaChain.add(c);
} catch (Exception e) {
// Ignore
}
return c;
}
现在从Criteria
为Document
创建新实例:
Criteria newCriteria = from(criteria.getCriteriaObject()); //You have full-compatible Criteria instance newCriteria.and("foobar").elemMatch(Criteria.where("field").is("value"));