2016-06-16 35 views
0

我想按用戶和消息時間戳排序未讀消息收集。我希望所有消息都由消息最近的用戶分組。我試過以下內容:流星和MongoDB排序由兩個子對象收集

UnreadMessages.find({}, 
    {sort: {'message.timestamp': -1, 'fromUser._id': 1} }); 

但是,這不會按用戶分組消息。

有沒有更好的方式來顯示按用戶分組的頂部最新消息?謝謝。

+0

分組和排序是不一樣的,如果你想擁有來自同一用戶的消息彼此相鄰,交換鍵的順序(先按用戶ID排序) – MasterAM

回答

0

你的代碼將做你想要的相反。

如果是MongoDB的,你真的應該做

UnreadMessages.find({}, 
    {sort: { 'fromUser._id': 1, 'message.timestamp': -1 } }); 

代替。但是Minimongo不會那樣工作。

有一個新功能,just got commited,它允許你指定你自己的比較功能。我還沒有嘗試過自己,但你應該能夠做到

function myComparatorFn(a, b) { 
    // Standard comparator procedure: return -1 if a < b, 0 if a == b, 1 if a > b 
} 

UnreadMessages.find({}, {sort: myComparatorFn }); 

但是,如果我讀了提交正確登錄,它看起來像這次提交剛好錯過了1.3.3版本:-(

另一種更復雜的解決方案是使用像https://atmospherejs.com/zvictor/mongodb-server-aggregation,然後在服務器上運行帶有$組的MongoDB聚合管道。

+0

感謝您的評論。排序不會這樣做。我想我必須做分組。乾杯。 –

+1

我用另一個全新的可能性更新了我的答案.... –