У меня две таблицы: Achievements и Achievementcompleteds
Структура Achievements: _idtitle и т. д.
Структура Achievementcompleted: _idachievement_iduser_id
Теперь мне нужно получить данные о завершенных достижениях user и отобразить их с незавершенными достижениями. Это список достижений, в котором нужно показать, что выполнено, а что не выполнено. Я пытаюсь сделать это так:
Achievement.aggregate([
{
$lookup: {
from: "achievementcompleteds", // collection name in db
localField: "_id",
foreignField: "achievement_id",
as: "completed"
}
}
]).then((results) => {});
Но завершенное всегда пусто
Скорее всего, вы имеете в виду, что $lookup не работает, и это, вероятно, потому, что achievement_id на самом деле является «строкой», в то время как «связанный» _id, конечно же, является ObjectId. В этом случае вам необходимо исправить свои данные.
Вероятно, это из-за ObejctID, о котором я никогда не думал
Так бывает почти всегда. Общий ответ должно быть намного легче найти. Надеюсь, после пары быстрых правок другим теперь это тоже будет легче.





Ваш запрос идеален. Итак, вам необходимо проверить следующую проблему
Вы хоть раз проверяли вывод
$lookup? Есть ли записи в массивеcompletedдля каких-либо документов? Существуют ли какие-либо документы из двух коллекций, которые действительно должны совпадать? Можете ли вы показать образцы документов, которые должны соответствовать вашим ожиданиям? И можете ли вы в принципе решить, какой вопрос вы здесь задаете, будь то результат агрегации или как написать шаблон для рабочего результата агрегации.