抱歉,标题含糊,无法尝试输入。
基本上,我正在重新构建Discord机器人,并且我在其排名系统中。我正在使用Pymongo (这是python标签的原因)。
我有Users
和Guilds
集合,我想知道如何为每个行会的每个用户建立排名。我需要能够guild_id
全局(跨所有行会)获得最高级别的用户,并针对特定行会获得最高级别的用户,并且必须按user_id
获得访问用户的排名。除了每个会员字段中存储的排名以外,我还有更多数据,但排名数据只是开始。
当前
我一直将数据存储在称为Members
的其自己的集合中的方式,但是由于它们是小的文档,并且在这种情况下存在重复的数据,所以这感觉不对/效率低下;感觉就像一个SQL多对多关系。
Memebers
{
user_id: int32,
guild_id: int32,
background: string,
level: int32,
points: int32
}
我应该将排名数据作为文档嵌入到Guilds中,键是user_id
吗?
{
"_id" : int32,
users : {
1 : {
background: string,
level: int32,
points: int32,
},
...
}
}
还是将members
字段设置为数组?
{
"_id" : int32,
users : [
{
user_id: 1,
background: string,
level: int32,
points: int32,
},
...
]
}
我想到的另一种可能的解决方案是将成员资格信息嵌入到每个用户中,但是与后者相比,这没有多大意义。
当前,要使服务器进入前十名,我要做的就是:
members.find({_id:guild_id}).sort([('level', -1), ('points', -1)].limit(10)
对于前十名,只需要忽略过滤器即可。
如果它是嵌入式的,我将如何处理?我会汇总吗?