繁体   English   中英

流星和MongoDB通过两个子对象对Collection进行排序

[英]Meteor and MongoDB sort Collection by two sub objects

我想按用户和消息时间戳排序未读消息集合。 我希望所有消息都按最新消息的用户分组。 我尝试了以下方法:

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

但是,这不会按用户对邮件进行分组。

有没有更好的方法可以按用户分组显示最新消息? 谢谢。

您的代码将执行与您想要的相反的操作。

如果是MongoDB,您确实应该这样做

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

代替。 但是Minimongo不能那样工作。

刚刚提交一个新功能,它允许您指定自己的比较器函数。 我自己还没有尝试过,但是您应该可以

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聚合管道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM