我想按用户和消息时间戳对未读消息集合进行排序。我希望所有消息都由消息最新的用户分组。我尝试过以下方法:
UnreadMessages.find({},
{sort: {'message.timestamp': -1, 'fromUser._id': 1} });
但是,这并没有按用户对消息进行分组。
是否有更好的方法可以在用户分组的顶部显示最近的消息?谢谢。
答案 0 :(得分: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之类的东西,然后在服务器上运行带有$ group的MongoDB聚合管道。