比方說,我有兩個集合在我的數據庫調用rumahsakit
。查找或forEach內部聚合MongoDB
先收藏稱爲dim_dokter
:
[{
"_id": ObjectId("58b22c79e8c1c52bf3fad997"),
"nama_dokter": "Dr. Basuki Hamzah",
"spesialisasi": "Spesialis Farmakologi Klinik",
"alamat": " Jalan Lingkar Ring Road Utara, Yogyakarta "
}, {
"_id": ObjectId("58b22c79e8c1c52bf3fad998"),
"nama_dokter": "Dr. Danie Nukman",
"spesialisasi": "Spesialis Anak",
"alamat": " Jalan Sudirman, Yogyakarta "
}, {
"_id": ObjectId("58b22c79e8c1c52bf3fad999"),
"nama_dokter": "Dr. Bambang Kurnia",
"spesialisasi": "Spesialis Mikrobiologi Klinik",
"alamat": " Jalan Ahmad Yani, Yogyakarta "
}]
第二集合稱爲fact_perawatan
:
[{
"_id": ObjectId("58b22d13e8c1c52bf3fad99a"),
"nama_pasien": "Clark",
"detail_perawatan": [{
"id_dokter": ObjectId("58b22c79e8c1c52bf3fad997"),
"jumlah_obat": 1
}, {
"id_dokter": ObjectId("58b22c79e8c1c52bf3fad998"),
"jumlah_obat": 1
}]
}]
收集fact_perawatan有id_dokter,實際上是指向dim_dokter._id。我想要聚合顯示fact_perawatan
集合中的這些數據,但是隻顯示id_dokter
,我想從dim_dokter
使用nama_dokter
。
這是我到目前爲止的代碼:
db.fact_perawatan.aggregate([
{
$match:
{
'_id': db.fact_perawatan.find({"_id" : ObjectId("58b22d13e8c1c52bf3fad99a")})[0]._id
}
},
{
$project:
{
nama_pasien: db.fact_perawatan.find({"_id": ObjectId("58b22d13e8c1c52bf3fad99a")})[0].nama_pasien,
perawatan: [
{
dokter: db.dim_dokter.find({"_id" : db.fact_perawatan.find({"_id": ObjectId("58b22d13e8c1c52bf3fad99a")})[0].detail_perawatan[0].id_dokter})[0].nama_dokter,
},
]
}
}
])
結果:
{ "_id" : ObjectId("58b22d13e8c1c52bf3fad99a"), "nama_pasien" : "Clark", "perawatan" : [ { "dokter" : "Dr. Basuki Hamzah" } ] }
這些代碼可以得到nama_dokter
從dim_dokter
,但只有一個數據。在我的情況下,數據可以達到5個。做detail_perawatan [0]到[5]不是解決方案。
所以,此代碼:
db.dim_dokter.find({"_id" : db.fact_perawatan.find({"_id": ObjectId("58b22d13e8c1c52bf3fad99a")})[0].detail_perawatan[0].id_dokter})[0].nama_dokter,
如何讓上面的代碼迴路儘可能多的在那裏的數據?所以我可以得到所有的數據。
感謝
你可以添加預期的迴應,你的mongo版本是什麼? – Veeram
@Veeram'{「_id」:ObjectId(「58b22d13e8c1c52bf3fad99a」),「nama_pasien」:「Clark」,「perawatan」:[{「dokter」:「Basuki Hamzah博士」},{「dokter」:「 Danie Nukman「}]}'我正在使用mongo v3.4.1 – ytomo