簡體   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