是否可以使用Spring Data MongoDb定义自定义条件?

时间:2016-11-25 14:36:57

标签: java spring-data-mongodb

我有一个简单的界面:

$search.val( term );
$search.trigger( 'keyup' );
$search.trigger( 'change' ); //Here

接下来我想进行下一次实施

 Criteria toCriteria(String key, String value)

但没有 $ eq 运算符。所以我的问题:

  • 为什么public class EqExpression implements Expression { @Override public Criteria toCriteria(String key, String value) { return Criteria.where(key).eq(Pattern.compile(value)); } } } 没有这样的运算符?
  • 有没有办法实施自定义条件实施,还是有解决方法?

  • 对我来说,拥有像

    这样的代码会很好
    org.springframework.data.mongodb.core.query.Criteria

一般来说,我的目的是实现其他查询语言,对于 @Override public Criteria toCriteria(String key, String value) { //return new BasicDBObject(key, new BasicDBObject("$eq", value)) converted to Criteria } gt这样的每个操作,我都有lt接口的具体实现。

请求可能看起来像Expression

我正在使用下一代码构建整个查询:

name=John&age>20

您可能有任何建议如何实现它更优雅

1 个答案:

答案 0 :(得分:0)

使用此answer,我能够创建简单的$ eq条件

private Criteria getEqCriteria(String value)
{
    // hack Criteria, because new Criteria().is(value) not working!
    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);
        criteria.put("$eq", value);
        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;
}