mongodb nodejs lookup не получает данные из внешней таблицы

#node.js #mongodb #lookup #aggregation

#node.js #mongodb #поиск #агрегация

Вопрос:

я пытаюсь выполнить поиск в mongodb, чтобы получить данные из двух таблиц. Вот что я создал до сих пор:

   database.collection('surveys').aggregate([
             { $lookup:
                    {
                      from: 'questions',
                      localField: '_id',
                      foreignField: 'surveyId',
                      as: 'questions'
                    }
                  }
                 ]).toArray(function(err, res) {
                 if (err) throw err;
                 console.log(JSON.stringify(res));
               });
  

Проблема в том, что данные из моей таблицы опроса отображаются хорошо, но данные из моей таблицы вопросов всегда представляют собой пустой массив, и я не знаю почему. Пожалуйста, найдите прилагаемые два скриншота моей структуры базы данных.

вопросительный объект

объект опроса

Ответ №1:

Это работает нормально, поэтому ваша проблема, вероятно, в том, что _id в опросе и SurveyID в вопросах не совпадают. Подсказка: попробуйте использовать клиент MongoDB, такой как Robo 3T, для отладки ваших запросов, вместо того, чтобы сначала выполнять это в коде.

 db.surveys.insert([
    { "_id" : "survey_1", "title" : "test" }
])

db.questions.insert([
    { "_id" : "question_1", "isSeek" : true, "question" : "test", "surveyId" : "survey_1" }
])

db.surveys.aggregate([
    { $lookup: { 
        from: 'questions', 
        localField:'_id', 
        foreignField:'surveyId', 
        as: 'questions'
    } }
])
  

Результат:

 {
    "_id" : "survey_1",
    "title" : "test",
    "questions" : [ 
        {
            "_id" : "question_1",
            "isSeek" : true,
            "question" : "test",
            "surveyId" : "survey_1"
        }
    ]
}