2016-06-16 34 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

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