2014-03-13 62 views
2

有沒有辦法迫使蒙戈外殼輸出順序排列的內容在頁面上?陣列的輸出格式外殼

具體做法是:給定一個數組[8888,8888,8888,8888]

我想它呈現爲8888, 8888, 8888, 8888,而不是

"r" : [ 
8888, 
8888, 
8888, 
8888 
] 

這是我一直得到。 (實際的陣列有848個8888元素。我知道這個例子會正確打印)

更具體地說,我試圖獲得Mandelbrot分形的聚合代碼,如published by John Page一樣。訣竅是保持字體大小非常小。但是,即使將字體大小設置爲2並將終端窗口設置爲1000列,陣列也會繼續垂直打印。

我已經做了一些實驗,根據每個數組元素的大小,字符間距和字體大小,粗略的指導是任何數組中的方括號[]> 50或元素的數量> 20,然後陣列垂直打印。

我曾嘗試使用Node.js的在終端bash shell中相同的實驗,這種情況不會發生。所以它似乎是一個Mongo shell的格式化問題。

我已經嘗試使用DBQuery.prototype._prettyShell = false作爲this answer的對面,因爲在Mongo shell中做了漂亮的打印,但沒有運氣。

佩奇先生慷慨再次測試代碼,並親自向我保證,它將按預期工作。

爲了完整性我正在運行的MongoDB外殼版本:2.4.9終端版本2.2.3(303.2)在Mac OS X 10.7.5

非常感謝

(注

:原代碼,公佈,在最初的 for循環中有2個缺少開放的大括號,我在我的代碼中修改了這個,它不是問題的原因,因爲聚合產生的最終數組是正確的,他們只是沒有正確渲染)

回答

0

爲了讓你需要的代碼工作:

MongoDB的版本2.5或更高版本。正如@NeilLunn指出,輸出需要一個遊標,以便在頁面上打印結果數組。

固定寬度字體有助於(如@ user3420593筆記),但如果您的輸出呈現類似於@NeilLunn發佈的圖像,那麼MongoDB PHP專家Derick Rethans發現了一個工作輪:將整數輸出轉換爲代碼爲每個'88888'和''(引號之間有5個空格)的5個字符的字符串。

mongo aggregation fractal

0

啊是的。你可能錯過了,或者沒有完全理解了這條線在該職位:

DBQuery.shellBatchSize = 500 

爲了解釋,即設置的光標在一次旅行獲取文件的數量。因此,一些比默認光標設置更大,這是像25

這裏是真正的問題。他使用開發版本要做到這一點,在即將發佈的aggregate返回遊標,而不是說在當前釋放所產生的文件數組。

所以,如果你仍然有興趣,你可以從downloads page當前的「發佈候選」,而應該讓你重現的結果。

我沒相當那裏我自己(並沒有更多的時間玩),但它是終端的行和列設置爲像什麼顯示在博客文章和截圖的問題爲了減少顯示的字體大小,縮小終端窗口

所以它是可能的,但你只是沒有安裝相同的工具。

enter image description here

+0

謝謝,我忘了補充一點,我確實有'DBQuery.shellBatchSize = 500 '設置。即使我沒有,我剛剛得到了圖像的頂部。 – astebbing

+0

@astebbing是的,但重點是你需要**一個版本大於2.4系列,以便有一個遊標。即使你設置了這個值,它也不會爲你做任何事情。 –

+0

你正確地猜測,Page先生正在使用開發版本,因爲他今天早上發郵件說他正在使用版本2.5 – astebbing

0

你需要使用一個固定寬度字體。每一個「像素」必須是相同的長度無論是「8888」或「1」

+0

謝謝。我已將字體設置爲固定。現在輸出使用Mongo 2.6版水平渲染,但是我得到的圖像與下面的@neillunn相同。根據[John Page的原始博客文章](http://ilearnasigoalong.blogspot.co.uk/2013/12/mongo-aggregating-fractals.html),這不像是一個適當的Manelbrot分形,所以我懷疑我有另一個設置錯誤,因爲代碼只是複製和粘貼。 – astebbing