a coleção A que tem um estrangeiro com B, B tem um estrangeiro com a coleção C, como posso trazer um estrangeiro de A para a coleção C? (agregado)
Nov 28 2020
Tenho 3 coleções:
country
{
"_id": "5fbc7cc705253c2da4820425",
"country":"USA"
}
city
{
"_id": "5fbc7cc705253c2da482025f",
"city": "New York",
"country_id":"5fbc7cc705253c2da4820425",
}
travel_reservation
{
"_id":"5fbc7cc705253c2da48202yQ"
"name_person":"pablo rojas",
"city_id":"5fbc7cc705253c2da482025f"
}
uma country
coleção, uma city
coleção e uma coleção de reservas de viagens ( travel_booking
). então, na coleção de reservas de viagens ( travel_booking
), uma pessoa tem uma cidade associada ( city_id
).
Como posso fazer um agregado retornar uma estrutura como a seguinte ?, onde além de obter o nome de city
, também posso obter o nome de country
.
Resultado desejado:
{
"_id":"5fbc7cc705253c2da48202yQ",
"name_person":"pablo rojas",
"city":{
"_id":"5fbc7cc705253c2da482025f",
"city":"New York"
},
"country":{
"_id":"5fbc7cc705253c2da4820425",
"country":"USA"
}
}
Eu tentei isso:
https://mongoplayground.net/p/JVhroCubElX
Respostas
1 turivishal Nov 28 2020 at 17:41
$lookup
juntar-se à coleção da cidade$lookup
juntar coleção country$project
para mostrar os campos obrigatórios, obtenha o primeiro elemento decity
ecountry
usando$first
db.travel_reservation.aggregate([
{
$lookup: { from: "city", localField: "city_id", foreignField: "_id", as: "city" } }, { $lookup: {
from: "country",
localField: "city.country_id",
foreignField: "_id",
as: "country"
}
},
{
$project: { name_person: 1, city: { $first: "$city" }, country: { $first: "$country" }
}
}
])
Parque infantil
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas