koleksi A yang memiliki orang asing dengan B, B memiliki orang asing dengan koleksi C, bagaimana cara membawa orang asing dari A ke koleksi C? (Agregat)
Nov 28 2020
Saya memiliki 3 koleksi:
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"
}
sebuah country
koleksi, sebuah city
koleksi dan kumpulan pemesanan perjalanan ( travel_booking
). lalu dalam koleksi pemesanan perjalanan ( travel_booking
) seseorang memiliki kota terkait ( city_id
).
Bagaimana cara membuat agregat mengembalikan struktur seperti yang berikut ?, di mana selain mendapatkan nama city
, saya juga bisa mendapatkan nama country
.
Output yang diinginkan:
{
"_id":"5fbc7cc705253c2da48202yQ",
"name_person":"pablo rojas",
"city":{
"_id":"5fbc7cc705253c2da482025f",
"city":"New York"
},
"country":{
"_id":"5fbc7cc705253c2da4820425",
"country":"USA"
}
}
Saya sudah mencoba ini:
https://mongoplayground.net/p/JVhroCubElX
Jawaban
1 turivishal Nov 28 2020 at 17:41
$lookup
bergabunglah dengan koleksi kota$lookup
bergabunglah dengan koleksi negara$project
untuk menampilkan bidang yang wajib diisi, dapatkan elemen pertama daricity
dancountry
penggunaan$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" }
}
}
])
Tempat bermain
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Taylor Sheridan Baru Menambahkan 1 Bintang 'Yellowstone' Favoritnya ke Pemeran 'Lawmen: Bass Reeves'