2013-07-01 127 views
0

我做我的應用程序服務器以下JSON數據,得到Java的蒙戈驅動程序(不BasicDataObject列表)

DBCollection collection = mongoDB.getCollection("collection"); 
    DBCursor dbCursor = collection.find(); 

我有一個JSON對象從服務器發送到客戶端,這樣怎麼能 我將DBCursor對象轉換爲JSON。

其實我發送一個大集合到客戶端,如果我將這個集合的文檔轉換成java對象比它吃很多內存,所以如果有一種方法來將dbcursor直接轉換爲json字符串,或者任何其他方法解決我的問題。 這將是很大的幫助。 謝謝。

它看起來像mongodriver創建數據對象的對象,當調用find方法,所以它不會幫助轉換成dbcursor JSON(這可以通過使用序列化()com.mongodb.util.JSON類的方法。

修訂問題:

有沒有辦法的情況下直接使用find方法來得到一個集合的數據

回答

0

你不想把光標轉換成JSON字符串,光標是簡單地迭代的方式。超過從查找返回的值。

詢問是否有方法在不使用「查找」的情況下從集合中獲取數據有點像詢問如何從SQL數據庫中獲取數據而不查詢它 - 不行。在某些時候,您必須撥打數據庫來獲取您想要的數據。在MongoDB Java驅動程序中,這是通過find()方法完成的。如果要限制返回的對象數量(並不奇怪,整個集合可能會佔用大量內存),那麼您需要pass the query details into the find method來篩選結果。但是,如果您只使用JSON,則可能需要調查MongoJack等第三方庫 - 它使用封面上的Java驅動程序,但會將查詢結果直接轉換爲JSON格式。

+0

你對使用find方法是正確的,但它將bason結果轉換爲DBObjects,我只是想阻止它,並希望直接通過實現與db溝通的實現驅動程序方法來獲得此bason數據(json prefred)。現在我正在尋找解決方案。因爲當我得到該集合的所有文件時,它花費了大約200mb的內存,這是不可取的。如果您已經有此類解決方案或任何其他解決方案,請幫助我。 –

+2

答案是,您無法獲取所有數據,因爲您說的原因 - 您無法將它全部保存在內存中。標準的做法是對結果進行分頁,即將一組數據(比如說一百個數據)撤回,返回這些數據,然後獲取下一批,然後返回這些數據等等。沒有辦法解決將所有結果拉入內存的事實將佔用大量內存。你已經提供了你想要的低級細節,但你能提供更高層次的觀點嗎?例如。 「試圖通過休息api返回客戶的完整列表」? – Trisha

+0

當我說分頁是這樣做的標準方式時,這適用於SQL數據庫以及Mongo。有關示例,請參見http://stackoverflow.com/questions/8383488/how-to-implement-paging-in-mongodb。 – Trisha