2015-02-05 56 views
0

我蒙戈架構是這樣的:的MongoDB:從嵌入文檔獲取排序字段

{ 
    "name":"Meeting Name", 
    "description":"Description", 
    "uuid":"YPCJaijg", 
    "participants":[ 
     "JLKGZnfFkGvX9DHgz", 
     "Rkhs4cu7LzyejcTYa" 
    ], 
    "log":{ 
     "1423091932927":"Let's do the 10th then", 
     "1423092118662":"Ok, the 10th it is.", 
     "1423092165083":"[Selected:20150210]" 
    } 
} 

我需要加載的「日誌」(時間戳:消息)字段到一個文本,而是因爲它可能可能會變大,我想我想排序和限制作爲查詢的一部分。

什麼是正確的方法來解決這個問題?我試過類似

db.meetings.find({uuid:"YPCJaijg"},{'log':1,'_id':0}).sort({"log":-1}) 

......但那不行。我一直在研究聚合框架,但我不知道這是否是正確的方向。我也不相信這個模式首先是合適的。所有的

+0

它不能增長* that * large:最大文檔大小目前是16兆字節。所以無論是加載它還是處理它的客戶端,或者改變你的模式。 –

回答

0

首先,你有一個問題,您的模式:

  • 恆豐文件壞蒙戈。不僅最大尺寸不能大於16mb,事實上你總會在文檔中添加一些新的信息會導致文檔系統上文檔的很多移動(當填充將被填充時)

您可以在$sort during the update operator的推送新值的同時對元素進行排序。這樣你就可以在查找過程中將它們排序。如果您想限制子文檔中元素的數量,則可以使用$slice projection.

儘管如此,你可以做到這一點,如果我是你,我寧願改變架構有兩個集合。你現在有一個(沒有日誌)和另一個只是日誌。

+0

對,我最初考慮了一個單獨的日誌集合,但是想從簡單的東西開始。會議日誌永遠不需要接近16mb的任何地方,所以我現在要堅持這個模式,並進行客戶端排序。 – T3db0t

+0

爲了使用$ sort更新操作符,日誌必須是一個對象(文檔)的數組,對吧? – T3db0t

+0

@ VirgilDisgr4ce抱歉,我錯過了那部分。它應該是一個數組,而不是一個對象。 –