2016-07-31 59 views
0

我有一個字符串與聚合json查詢(從文件加載)爲mongodb。在robomongo中,它運行良好。因此,在robomongo,我有:如何在字符串中使用json執行聚合mongo查詢?

db.getCollection('Odds').aggregate(
[ 
{ 
    "$lookup": { 
     "from": "...", 
     "localField": "...", 
     "foreignField": "...", 
     "as": "..." 
    } 
}, 
{ "$unwind": "$..." }, 
{ 
    "$redact": { 
     ... etc ... 
    } 
} 
] 
) 

JSON文件是一樣的,但與第一和去除,使得它的JSON的最後一行。當我用Java加載它時,它解析正確。解析的結果恰好是一個「BasicDBList」:

String query = "..."; // read from file 
BasicDBList q = (BasicDBList) JSON.parse(query); 

現在,我想這傳遞給聚合函數,但它不工作:

new MongoClient().getDatabase("db").getCollection("coll").aggregate(q); 

這條線給出:

The method aggregate(List<? extends Bson>) in the type MongoCollection<Document> is not applicable for the arguments (BasicDBList) 

有沒有辦法轉換類型?我應該用另一種方式來做嗎?

回答

0

你是不遠處的解決方案:

的聚合函數有:.aggregate(List<DBObject>) 但是你要使用的JSON.parse讓你強制轉換成它,如果你在你的查詢列表,因此沒問題

String query="[....}"; 
List<DBObject> q= (List<DBObject>)JSON.parse(query); 
Iterable<DBObject> result=new MongoClient().getDatabase("db").getCollection("coll").aggregate(q).results();` 

結果可以重複。

相關問題