[英]Find or forEach Inside Aggregate MongoDB
Let's say I have two collection in my database call rumahsakit
. 假设我的数据库调用
rumahsakit
有两个集合。
First collection called dim_dokter
: 第一个集合称为
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 "
}]
Second collection called fact_perawatan
: 第二个集合称为
fact_perawatan
:
[{
"_id": ObjectId("58b22d13e8c1c52bf3fad99a"),
"nama_pasien": "Clark",
"detail_perawatan": [{
"id_dokter": ObjectId("58b22c79e8c1c52bf3fad997"),
"jumlah_obat": 1
}, {
"id_dokter": ObjectId("58b22c79e8c1c52bf3fad998"),
"jumlah_obat": 1
}]
}]
Collection fact_perawatan have the id_dokter that is actually point to the dim_dokter._id . 收集fact_perawatan有,实际上是指向dim_dokter._id的id_dokter。 I want to do aggregation to show this data in
fact_perawatan
collection but instead showing just the id_dokter
, I want to use nama_dokter
from dim_dokter
. 我想进行汇总以在
fact_perawatan
集合中显示此数据,但我只想使用nama_dokter
的id_dokter
,而不是仅显示dim_dokter
。
This is my code so far: 到目前为止,这是我的代码:
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,
},
]
}
}
])
result: 结果:
{ "_id" : ObjectId("58b22d13e8c1c52bf3fad99a"), "nama_pasien" : "Clark", "perawatan" : [ { "dokter" : "Dr. Basuki Hamzah" } ] }
Those code can get the nama_dokter
from dim_dokter
, but only one data. 这些代码可以得到
nama_dokter
从dim_dokter
,但只有一个数据。 In my case, the data can be up to 5. do the detail_perawatan[0] to [5] is not solution. 在我的情况下,数据最多可以为5。执行detail_perawatan [0]至[5]是不可行的。
So, this code: 因此,此代码:
db.dim_dokter.find({"_id" : db.fact_perawatan.find({"_id": ObjectId("58b22d13e8c1c52bf3fad99a")})[0].detail_perawatan[0].id_dokter})[0].nama_dokter,
How make the code above to loop as many as the data in there ? 如何使上面的代码循环访问其中的数据? so I can get all the data.
这样我就可以获得所有数据。
Thanks 谢谢
You can use a $lookup
to left join with dim_dokter
following by a $group
to regroup your data in perawatan
field : 您可以使用
$lookup
与dim_dokter
左dim_dokter
,然后再使用$group
在perawatan
字段中重新组合数据:
db.fact_perawatan.aggregate([{
$match: {
'_id': ObjectId("58b22d13e8c1c52bf3fad99a")
}
}, {
$unwind: "$detail_perawatan"
}, {
$lookup: {
from: "dim_dokter",
localField: "detail_perawatan.id_dokter",
foreignField: "_id",
as: "dim_dokter"
}
}, {
$unwind: "$dim_dokter"
}, {
$group: {
_id: "$_id",
nama_pasien: {
$first: "$nama_pasien"
},
perawatan: {
$push: {
"dokter": "$dim_dokter.nama_dokter"
}
}
}
}])
The $unwind
is used to deconstruct the array field detail_perawatan
to be able to $lookup
afterwards $unwind
用于解构数组字段detail_perawatan
以便以后可以进行$lookup
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.