我想按用户和消息时间戳排序未读消息收集。我希望所有消息都由消息最近的用户分组。我试过以下内容:流星和MongoDB排序由两个子对象收集
UnreadMessages.find({},
{sort: {'message.timestamp': -1, 'fromUser._id': 1} });
但是,这不会按用户分组消息。
有没有更好的方式来显示按用户分组的顶部最新消息?谢谢。
我想按用户和消息时间戳排序未读消息收集。我希望所有消息都由消息最近的用户分组。我试过以下内容:流星和MongoDB排序由两个子对象收集
UnreadMessages.find({},
{sort: {'message.timestamp': -1, 'fromUser._id': 1} });
但是,这不会按用户分组消息。
有没有更好的方式来显示按用户分组的顶部最新消息?谢谢。
你的代码将做你想要的相反。
如果是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聚合管道。
感谢您的评论。排序不会这样做。我想我必须做分组。干杯。 –
我用另一个全新的可能性更新了我的答案.... –
分组和排序是不一样的,如果你想拥有来自同一用户的消息彼此相邻,交换键的顺序(先按用户ID排序) – MasterAM