Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

มีการสืบค้น MongoDB เพื่อเชื่อมรายการย่อยแบบลึกหรือไม่


เชื่อมต่อรายการย่อยแบบลึกโดยใช้ aggregate() พร้อมกับ $unwind ให้เราสร้างคอลเลกชันที่มีเอกสาร -

> db.demo70.insertOne(
...    {
...
...       "first" : [
...          {
...             "details" : {
...                "second" : [
...                   {
...                      "StudentDetails" : {
...                      "Score" : 10
...                   }
...                },
...                {
...                   "StudentDetails" : {
...                   "Score" : 20
...                }
...             },
...             {
...                "StudentDetails" : {
...                   "Score" : 30
...                }
...             }
...          ]
...       }
...    },
...    {
...       "details" : {
...          "second" : [
...             {
...                "StudentDetails" : {
...                "Score" : 11
...                }
...             },
...             {
...                "StudentDetails" : {
...                   "Score" : 18
...                }
...             },
...             {
...                "StudentDetails" : {
...                   "Score" : 29
...                   }
...                }
...             ]
...          }
...       }
...    ]
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e29ad4d0912fae76b13d76d")
}

แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -

> db.demo70.find().pretty();

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{
   "_id" : ObjectId("5e29ad4d0912fae76b13d76d"),
   "first" : [
      {
         "details" : {
            "second" : [
                  {
                     "StudentDetails" : {
                     "Score" : 10
                  }
               },
               {
                  "StudentDetails" : {
                     "Score" : 20
                  }
               },
               {
                  "StudentDetails" : {
                     "Score" : 30
                  }
               }
            ]
         }
      },
      {
         "details" : {
            "second" : [
               {
                  "StudentDetails" : {
                     "Score" : 11
               }
            },
            {
               "StudentDetails" : {
                  "Score" : 18
                  }
               },
               {
                  "StudentDetails" : {
                     "Score" : 29
                  }
               }
            ]
         }
      }
   ]
}

ต่อไปนี้เป็นแบบสอบถามเพื่อเชื่อมรายการย่อยลึก -

> db.demo70.aggregate([
... { $unwind: "$first" },
... { $unwind: "$first.details.second" },
... { $sort: { "first.details.second.StudentDetails.Score": -1 } },
... { $limit: 3 },
... { $replaceRoot: { newRoot: "$first.details.second.StudentDetails" } },
... { $sort: { "Score": 1 } }
... ]);

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{ "Score" : 20 }
{ "Score" : 29 }
{ "Score" : 30 }