我目前正在制作一个成就系统,尝试将其保存在两个集合中。 一个包含名称和ID的集合, 另一个包含用户及其进展的集合。
我一直在研究Aggregation和$lookup,并取得了一些进展,但我不确定需要做什么才能实现我想要的输出。
如果用户存在于成就中,则获取进度值和其用户ID,如果不存在,则将进度值设置为0。
这不是类似于Mysql中的连接吗?在MongoDB中该怎么做呢?
变量userid = 33;
尝试:
db.getCollection('achievements').aggregate([
{
$lookup:
{
from: "achievement_users",
localField: "id",
foreignField: "id",
as: "inventory_docs"
}
}
])
成就架构:
{
"name" : "testing",
"id" : 1,
"max" : 12,
},
{
"name" : "testing2",
"id" : 2,
"max" : 12,
}
成就用户:
{
"userid" : 33,
"id" : 1,
progress: 1,
},
{
"userid" : 446,
"id" : 1,
progress: 1,
}
期望输出:
{
name: "testing",
id: 1,
userid: 33,
progress: 1,
max : 12,
},
{
name: "testing2",
id: 2,
progress: 0,
max : 12,
},
编辑:
我需要用户已经完成的所有成就,以及未完成的成就(未完成=进度=0)。
可能是用户尚未完成的成就。我也想列出它们,但进度值为0。
更新2:在achievement_users中没有与特定userid匹配的结果时,还需要它给我提供结果。
{$match: {id: {$in: ['1', '2']}}}
。 - Julien TASSIN