我的問題是關於從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\" }"
)。
這樣做。我在問題中提出了詳細的解釋。謝謝! – Mac