Mongodb查询构造函数采用原始查询字符串Java

时间:2014-08-28 18:50:23

标签: spring mongodb-java

我正在尝试提出一个概念来获取查询字符串,并通过查询对象将其传递给类似的东西:

returnList = mongoTemplateTracking.find(query,TrackingData.class, COLLECTION_NAME);

我一直在查看Query和Criteria类的构造函数,看看它们是否可以采用原始字符串,例如:

 "ID" : "32399a"

而不是通过Criteria.where()构建Criteria对象。是()等..

我见过方法

protected <T> List<T> doFind(String collectionName,
                 com.mongodb.DBObject query,
                 com.mongodb.DBObject fields,
                 Class<T> entityClass)

然而,当我将mongoTemplateTracking自动装入我的课程时,我无法访问此方法。

2 个答案:

答案 0 :(得分:2)

MongoDB查询语言(&#34; MQL&#34;)很容易用JSON格式表示。所以,如果你有一个字符串表达式,如:

String s = "{\"$or\": [ {\"name\": \"buzz\"}, {\"age\": {\"$lt\": 20 }} ] }";

然后你可以用这个util轻松地解析它:

import com.mongodb.util.JSON;
DBObject query = (DBObject) JSON.parse(s);
yourCollection.find(query);

看看In Java, is there a way to write a string literal without having to escape quotes?,可以更轻松地在长查询表达式中转义引号。

答案 1 :(得分:0)

JSON.parse(json)已弃用。使用此代码:

String s = "{\"$or\": [ {\"name\": \"buzz\"}, {\"age\": {\"$lt\": 20 }} ] }";
Bson bson =  BasicDBObject.parse( json );
collection.find(bson);