Агрегатный конвейер addfield не получает соответствующих значений - PullRequest
0 голосов
/ 22 марта 2019

Почему-то кажется, что мой код не даст мне значения progress и completed, как предполагалось.

в данный момент выполняется запрос ,, это приведет к:

[{  
   badgeid:4,
   progress:44,
   "name":"x1",
   "progress":0,
   "completed":false,
   "userid":"5c8522a96bcca9268c0753fe"
},
{  
   "badgeid":5,
   "progress":44,
   "name":"x2",
   "completed":false,
   "userid":"5c8522a96bcca9268c0753fe"
}

]

По какой-то причине он не даст соответствующее значение прогресса и завершенное значение соответствующему достижению.

Я определил, когда документ achievement_users badgeid 5 с атрибутом completed true будет возвращать все документы с completed true вместо того, чтобы фактически давать правильные значения отдельным документам.

Я бы хотел, чтобы прогресс был связан с соответствующим bageid с правильным значением и таким же с завершенным, если у пользователя нет записи со значком в достижении_пользователей, completed будет false, иначе это будет забрать с соответствующего.

Как бы мне этого добиться?

База данных текущих достижений:

{  
   badgeid:5,
   progress:44,
   completed:true,
   userid:"5c8522a96bcca9268c0753fe"
}     

База текущих достижений:

[  
   {  
      "badgeid":4,
      "name":"xx1",
      "max":100,
   },
   {  
      "_id":"5c94c032758c8a2044404995",
      "badgeid":5,
      "name":"xx2",
      "max":1,
   }

   ]

Вот мой агрегат:

    achivementUsers.aggregate([
    { "$match": { "userid": '' +userid + '' }},
    { "$lookup": {
            "from": "achievements",
            "let": { "badgeid": "$badgeid", "progress": "$progress", "userid": "$userid", "completed":"$completed" },
            "pipeline": [
                { "$addFields": {
                        "progress": { "$cond": [{ "$eq": ["$badgeid", "$badgeid"] }, "$$progress", 0] },
                        "completed": { "$cond": [{ "$eq": ["$badgeid", "$$badgeid"] }, true, false] },
                        "userid": "$$userid",
                    }}
            ],
            "as": "inventory_docs"
        }},
    { "$unwind": "$inventory_docs" },
    { "$replaceRoot": { "newRoot": "$inventory_docs" }}
]).then(function (response) {

редактирование:

желаемый вывод:

[{  
   badgeid:4,
   progress:0,
   "name":"x1",
   "progress":0,
   "completed":false,
   "userid":"5c8522a96bcca9268c0753fe"
},
{  
   "badgeid":5,
   "progress":44,
   "name":"x2",
   "completed":true,
   "userid":"5c8522a96bcca9268c0753fe"
}

]
...