#mongodb #aggregate #lookup
#mongodb #агрегат #поиск
Вопрос:
Агрегированный поиск MongoDB не дает результата, пока foreignField как _id . У меня есть две коллекции, users
и discussions
Пример users
данных:
[{
_id: 5f9c50dcfac1f091400225e3,
email: 'Peter.Parker@gmail.com',
details: { fname: 'Peter Test', lname: 'Fulton' },
},
{
_id: 5fa432bfb91fab7db60c70eb,
email: 'Spidy@xxx.com',
details: { fname: 'Frodo', lname: 'Baggins' },
},
{
_id: 5fa8ec7d3ce22610e5d15190,
email: 'tommy@xxx.com',
details: { fname: 'Tommy', lname: 'test' },
},
{
_id: 5fc38bb0b3683651be970180,
email: 'jerry@xxx.io',
},
{
_id: 5fd2340cc443d155ab38383b,
email: 'Dexter@xxx.io',
details: { fname: 'Dexter', lname: 'Lab' },
}]
Пример discussions
данных:
{_id: ObjectId("5fb2abd6b14fa5683979df58"),
tags: [ 'javascritp', 'css', 'html' ],
title: 'Why is this inline-block element pushed downward?',
post: 'Test Post',
learnerId: ObjectId("5f9c50dcfac1f091400225e3"),
}
Здесь « _id
of users
» связано с « learnerId
of « discussions
.
Мой агрегированный запрос выглядит так, как показано ниже.
db.users.aggregate([
{ $project: { "details.fname": 1, "details.lname":1,email:1, _id:1}},
{$lookup: {
from: "discussions",
localField: "learnerId",
foreignField: "_id",
as: "discussions"
}}
])
Здесь 'Peter Test'
с _id 5f9c50dcfac1f091400225e3
связан с. discussions LeanerId
Но я ожидал, что обсуждения будут заполнены в моем результате. Я вижу пустой массив обсуждений во всех коллекциях пользователей.
[{
_id: 5f9c50dcfac1f091400225e3,
email: 'Peter.Parker@gmail.com',
details: { fname: 'Peter Test', lname: 'Fulton' },
discussions: []
},
{
_id: 5fa432bfb91fab7db60c70eb,
email: 'Spidy@xxx.com',
details: { fname: 'Frodo', lname: 'Baggins' },
discussions: []
},
{
_id: 5fa8ec7d3ce22610e5d15190,
email: 'tommy@xxx.com',
details: { fname: 'Tommy', lname: 'test' },
discussions: []
},
{
_id: 5fc38bb0b3683651be970180,
email: 'jerry@xxx.io',
discussions: []
},
{
_id: 5fd2340cc443d155ab38383b,
email: 'Dexter@xxx.io',
details: { fname: 'Dexter', lname: 'Lab' },
discussions: []
}]
Можете ли вы указать, что не так в моем агрегированном запросе здесь?
Комментарии:
1. У вас разные типы идентификаторов, возможно, в результате они не совпадают.
2. У вас не совпадают идентификаторы.. Работает игровая площадка mongo mongoplayground.net/p/YDSJl1VU62S
3. Спасибо вам за ваш ответ. Я неправильно понял. Спасибо за разъяснения.
Ответ №1:
Вы не сопоставили localField и foreignField
db.users.aggregate([
{
$project: {
"details.fname": 1,
"details.lname": 1,
email: 1,
_id: 1
}
},
{
$lookup: {
from: "discussions",
localField: "_id",
foreignField: "learnerId",
as: "discussions"
}
}
])
Работает игровая площадка Mongo