2017-04-03 95 views
0

它看起來很奇怪的問題,但讓我進一步解釋,我需要查詢mongodb集合並獲取文檔。收集大小以TB爲單位。我必須定期對一組文件進行一些操作(每2小時後說)。操作非常簡單,找到文檔(按照標準),並複製到另一個集合,並從原始集合中刪除。問題是我無法決定(不知道)將檢索的文檔大小。我正在使用MongoTemplate(我必須去這個)。我相信文檔的大小必須小於RAM。但仍然是什麼程序來獲得文檔的確切大小,所以我不會得到任何超時或空間不足的錯誤。如何獲得'find'查詢的mongo db文檔大小限制?

+0

如果您在彙總查詢中使用**'$ out' **階段將文檔寫入其他集合,則文檔大小可能超過RAM,您只需將'allowDiskUse'參數設置爲true – felix

+0

嘿。因爲我可以限制從收集中檢索的文件數量並處理那些文件以獲得更好的性能。如何計算該限制,以便內存不會超出空間。你明白我的意思了嗎?我們以16GB內存和64位處理器的桌面爲例。 –

回答

0

我認爲這符合你的目的─

Object.bsonsize(db.students.find()) 
Object.bsonsize(db.students.findOne({*condition*})) 

它返回特定的文件(以字節爲單位)的大小。

+0

嘿。我知道收藏的大小。我想計算從收集和處理獲取更多性能的文檔數量。我可以遵循什麼程序? –

0

一個mongo對象的最大對象大小爲16MB。我假設處理16MB應該對你的系統沒有問題。因此,您從源集合中獲取一個對象並將其複製到目標集合。

對於返回多個結果的查詢,使用遊標遍歷每個結果並將結果複製到新集合中。