2014-08-28 57 views
0

我试图想出一个概念,以一个查询字符串,并将它通过查询对象传递到这样的事情:MongoDB的查询构造吃生的查询字符串的Java

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

我一直看着这两个查询和标准类的构造函数,看看他们是否可以采取原始字符串如:

"ID" : "32399a" 

而是建立在标准通过Criteria.where对象的()是()等。

我见过的方法

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

但是由于我的自动绑定到mongoTemplateTracking我的课我无法访问此方法。

回答

2

MongoDB查询语言(“MQL”)很容易用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?使长查询引号的转义表达式一点点更轻松。