2013-12-12 36 views
1

我的問題是關於從MongoDB Java驅動程序查詢配置返回的類型。MongoDB Java驅動程序:將數據庫記錄列表作爲單個對象返回

我正在執行一個查詢,它將從MongoDB返回多個對象。我使用MongoDB的Java驅動程序如下:

DBCollection collection = ...; 
DBObject query = new DBObject("someField", "someValue"); 

collection.find(query); 

這會返回一個DBCursor,它可以通過一組DBObjects迭代。由於我想返回原始JSON,因此我會遍歷每個對象並使用StringBuilder將結果聚合爲一個字符串(使用DBObject.toString())。儘管如此,這還是引發了其他問題,因爲最終結果中包含了轉義字符。

舉個例子,說我有兩個記錄在數據庫:

{ 
    someField : "someValue" 
}, 
{  
    someField : "someOtherValue" 
} 

得到一個DBCursor,並建立一個字符串用StringBuilder後,最後的結果是:

String s = "{ someField : \"someValue\" }, { someField : \"someOtherValue\" }"; 

我的理想解決方案是返回一個單獨的DBObject,並將其稱爲.toString()方法,或者(更加理想)只是從Mongo中獲得原始狀態。

一如既往,任何想法或建議將不勝感激。

謝謝。

編輯 - ANSWERED,由於Mzzl

private class SingleStringCollectionCallback implements CollectionCallback { 

    private final DBObject dbo = new BasicDBObject("someField", "someValue"); 
    private final DBObject match = new BasicDBObject("$match", dbo); 

    public Object doInCollection(DBCollection collection) throws MongoException, DataAccessException { 

     AggregationOutput ao = collection.aggregate(match); 

     /** CommandResult contains the results list (as a BasicDBList) in its "result" field. */ 
     return ao.getCommandResult().get("result"); 

    } 
} 

mongoTemplate.execute(COLLECTION_NAME, new SingleStringCollectionCallback()); 

BasicDBList.toString()方法序列化列表到單個JSON字符串。請注意,您應該讓您選擇的JSON序列化程序處理toString()調用,並將它傳遞給BasicDBList。否則,您可能會在最終結果中找到轉義字符("{ someField : \"someValue\" }")。

回答

2

彙總框架中的查詢結果是單個文檔。也許你可以重寫你的查詢來使用aggregate? {someField:someValue}之後的$匹配可能由'_id'組成的$組?

+0

這樣做。我在問題中提出了詳細的解釋。謝謝! – Mac

相關問題