2012-04-05 167 views
0

我研究了mongodb 2.1的總體框架。我做了一個測試。何時使用mongodb的聚合框架?

var drugstore = { 
    id: 8600110, 
    name: "store1",  
    transaction_flow: [ 
     { 
     pepdate: 20120327, 
     create_date: "2012-3-27 16:36:33", 
     trace: "000256", 
     peopleid: "123456",   
     tranamt: 1000, 
     }, 
     { 
     pepdate: 20120405, 
     create_date: "2012-3-27 16:36:33", 
     trace: "000256", 
     peopleid: "123456",   
     tranamt: 1000, 
     } 
       ] 
}; 

在我將4萬個數據插入到transaction_flow後,mongodb崩潰了。而且我知道mongodb文檔的極限大小是16Mb,現在藥店的集合是22Mb。所以聚合命令,例如。放鬆,爲什麼設計這個命令,以及何時使用?

+1

您是否嘗試過使用is * across *文件?現在你只有一個龐大的文件。 – Nik 2012-04-05 16:01:13

+0

@Nik什麼是跨文件? – avatas 2012-04-06 02:23:02

+1

您在這裏只有一個文檔 - drugstore和40000個transaction_flows。相反,您可能想要爲藥店插入一個文檔,併爲transaction_flow插入40000個不同的文檔(不嵌套在藥店中)。 Mongo可以很好地處理很多小文件。 – Nik 2012-04-06 11:26:47

回答

0

MongoDB命令的任何結果的最大大小限制爲64MB。有一個正在進行的ticket,它將添加一個類似於map reduce命令的out選項,您可以將結果轉儲到新的集合中。

+0

感謝您的回答,但是我的問題是文檔的子數組對象受限於16MB,並且不能滿足我的要求。 – avatas 2012-04-05 17:17:53

+0

@avatas:當前文檔限制(自MongoDB 2.2開始)爲16Mb,這也是可以通過聚合框架或Map/Reduce以'inline'輸出返回的結果限制。如果你試圖返回超過16Mb的操縱結果,你會希望使用Map/Reduce和[output to a collection](http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-Outputoptions)。 – Stennie 2012-09-19 01:23:03