#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"
}
]
}