【发布时间】:2017-01-08 02:26:21
【问题描述】:
我有一个(消息)集合,其中包含已读和未读消息的用户,类似于下图所示:
userName READ MESSAGES unreadMessages
Paul Otterson 1 0
Vincent Guily 0 1
Paul Otterson 0 1
Vincent Guily 0 1
Paul Otterson 1 0
我能够消除“用户名”重复项,这是我通过此帮助代码完成的:
Template.messages.helpers({
'Names': function () {
var loggedUserName = Meteor.user().services.facebook.name;
var lastId;
var counter = 0;
var transactions = Messages.find({userName: loggedUserName}, {sort: {time: -1}}).fetch();
var users = _.uniq(transactions,true, function(messages) {return messages.userName});
users.forEach (function (row) {
counter +=1;
});
console.log(counter+ " number of users in Messages collection");
return users;}
});
助手:
<template name="messages">
{{#each Names}}
{{userName}} has {{unreadMessages}} Unread messages </br>
{{/ each}}
</template>
让这个
Paul Otterson has 0 Unread messages
Vincent Guily has 1 Unread messages
由于某些用户有特定数量的未读消息,我如何编写帮助代码来显示每个用户的未读消息数量?
为了澄清我想实现以下目标:
Paul Otterson has 1 Unread messages
Vincent Guily has 2 Unread messages
期待您的帮助。
【问题讨论】:
-
数一数什么?请使用信息性标题。
-
也许你可以使用group。
-
使用aggregation framework: $group by userName 和$sum unreadMessages
-
@Joao 感谢您指出我的方向。您介意在代码中演示如何实现这一点吗?
-
我认为这是一个非常简单的解决方案,不需要聚合。请粘贴您的“消息”架构以及如何保存阅读消息的人。
标签: javascript mongodb meteor foreach