2014-08-28 55 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?使長查詢引號的轉義表達式一點點更輕鬆。