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

前端之家收集整理的这篇文章主要介绍了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" }}
])
原文链接:https://www.f2er.com/js/531238.html

猜你在找的JavaScript相关文章