javascript-猫鼬模式的加入/查找聚合

我目前正在制作一个成就系统,并尝试将其保存在两个集合中.
一个包含名称和ID的集合,
以及其他与用户有关的收藏及其进度.

我一直在查看“聚合”和“ $lookup”,并取得了一些进展,但是我不确定要获得所需的输出将需要做什么.

如果用户存在成就,则通过集合获取进度值及其用户标识;否则,将进度值设为0.

这不是某种形式的加入,例如MysqL吗?在MongoDB中如何?

可变的用户ID = 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,}

成就用户

{
    "userid" : 33,progress: 1,{
        "userid" : 446,}

所需的输出

{
name: "testing",id: 1,userid: 33,max : 12,{
name: "testing2",id: 2,progress: 0,

编辑:

我需要用户已完成但尚未完成的所有成就(未完成=进度= 0).

这可能是用户尚未完成的成就.我也要列出它们,但要使进度值为0.

更新2:
也需要它给我结果,而那个特殊用户ID的Achievement_users中没有匹配项.

最佳答案
您可以使用以下汇总

db.achievement_users.aggregate([
  { "$match": { "userid": 33 }},{ "$lookup": {
    "from": "achievement","let": { "id": "$id","progress": "$progress","userid": "$userid" },"pipeline": [
      { "$addFields": {
        "progress": { "$cond": [{ "$eq": ["$id","$$id"] },"$$progress",0] },"userid": "$$userid"
      }}
    ],"as": "inventory_docs"
  }},{ "$unwind": "$inventory_docs" },{ "$replaceRoot": { "newRoot": "$inventory_docs" }}
])

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...