如何计算所有在数据库中具有角色的用户的“点数”
Posted
技术标签:
【中文标题】如何计算所有在数据库中具有角色的用户的“点数”【英文标题】:How to count "points" from all users with a role in a database 【发布时间】:2021-01-12 00:30:22 【问题描述】:好的,我目前正在尝试使用 MongoDB 创建一个“帮派”系统。我已经设置了一个积分系统并想创建“帮派”。我希望一个帮派的一个特征是它具有全球“财富”,它将所有具有该帮派角色的用户添加到一起并将其存储在数据库中。
我如何让所有具有特定角色的用户,然后检查他们的所有点并将它们加在一起。
我的猜测是运行Points.find(serverID: message.guild.id).sort([[`points`, `descending`]
但是,我如何让所有成员都担任一个角色,这样我才能将他们的观点集中在一起。
我的积分模型:
const mongoose = require("mongoose");
const pointsSchema = mongoose.Schema(
userID: String,
userName: String,
serverID: String,
points: Number
);
module.exports = mongoose.model("Points", pointsSchema);
【问题讨论】:
【参考方案1】:第一步是让每个具有角色的成员。您可以使用 Role.members
属性轻松完成此操作。然后,您可以使用 Collection.map()
将所有用户按 ID 映射(这样您就可以找到他们的点文档),并使用 Collection.array()
将集合转换为数组。
然后,您可以使用 mongoose $in
运算符查找数组中包含 userID
的每个文档。
最后,您可以使用Array.prototype.reduce()
将所有点相加。
// <role> is a placeholder for the role object
const members = <role>.members.map((m) => m.id).array();
Points.find(
serverID: message.guild.id, userID: $in: members ,
(err, result) =>
if (err) throw err;
if (!result) console.log('There are no users with this role');
console.log(
`Point Total: $result.reduce((acc, curr) => acc + curr.points, 0)`
);
);
【讨论】:
它说const members = args.members.map((m) => m.id).array();
地图在 args.members.map 中无法识别
我正试图从这个角色中夺取角色:let role = message.guild.roles.cache.find(r => r.name === `$args`);
为什么它不起作用?我只需要将 args 放入角色中。它说它是未定义的
args
是一个数组。您需要将其与字符串进行比较。
同样的想法:无法读取未定义公会的“地图”属性。
如果我尝试使用message.guild.roles.cache.get(role).members.map...
运行它,那么它会说无法获取未定义的成员。它是如何未定义的。以上是关于如何计算所有在数据库中具有角色的用户的“点数”的主要内容,如果未能解决你的问题,请参考以下文章
laravel-如何在 5.1 中使用 zizaco 获得具有所有角色和所有权限的用户?
在Angular中->如何使用基于角色的访问权限检查用户是不是具有权限,并将角色保存在数据库中
Discord.js 如何列出具有特定角色的所有成员的显示名称