比方说,我有两个集合在我的数据库调用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