gpt4 book ai didi

javascript - 如何计算非重复数组中重复字段的数量?

转载 作者:行者123 更新时间:2023-12-03 06:12:45 24 4
gpt4 key购买 nike

我有一个(消息)集合,其中包含已读和未读消息的用户,类似于下图所示:

userName               READ MESSAGES     unreadMessages
Paul Otterson 1 0
Vincent Guily 0 1
Paul Otterson 0 1
Vincent Guily 0 1
Paul Otterson 1 0

我能够消除“userName”重复项,这是通过以下帮助程序代码完成的:

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

期待您的帮助。

最佳答案

使用aggregation framework 您可以在其中使用 $group 管道步骤,按 userName 字段对所有输入文档进行分组,并应用累加器表达式 $sum 发送至群组以获取未读和已读消息总数。

您的管道将如下所示:

var pipeline = [        
{
"$group": {
"_id": "$userName",
"readMessages": { "$sum": "$read" },
"unreadMessages": { "$sum": "$unread" }
}
},
{
"$project": {
"userName": "$_id", "_id": 0,
"unreadMessages": 1, "readMessages": 1
}
}
];
var users = Messages.aggregate(pipeline);

您可以添加meteorhacks:aggregate package 在 Meteor 中实现聚合:

添加到您的应用

meteor add meteorhacks:aggregate

由于此包在 Mongo.Collection 实例上公开了 .aggregate 方法,因此您可以调用该方法来获取具有 count 字段的文档的结果数组。

关于javascript - 如何计算非重复数组中重复字段的数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39250583/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com