繁体   English   中英

在内部MongoDB中查找或查找每个

[英]Find or forEach Inside Aggregate MongoDB

假设我的数据库调用rumahsakit有两个集合。

第一个集合称为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有,实际上是指向dim_dokter._idid_dokter。 我想进行汇总以在fact_perawatan集合中显示此数据,但我只想使用nama_dokterid_dokter ,而不是仅显示dim_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_dokterdim_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,

如何使上面的代码循环访问其中的数据? 这样我就可以获得所有数据。

谢谢

您可以使用$lookupdim_dokterdim_dokter ,然后再使用$groupperawatan字段中重新组合数据:

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"
            }
        }
    }
}])

$unwind用于解构数组字段detail_perawatan以便以后可以进行$lookup

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM