ก่อนอื่นขอต้อนรับสู่ MongoDB!
สิ่งที่ต้องจำก็คือ MongoDB ใช้วิธีการจัดเก็บข้อมูลแบบ "NoSQL" ดังนั้นจงพินาศความคิดในการเลือกการเข้าร่วมและอื่น ๆ จากใจของคุณ วิธีการจัดเก็บข้อมูลของคุณอยู่ในรูปแบบของเอกสารและคอลเลคชันซึ่งช่วยให้สามารถเพิ่มและรับข้อมูลจากที่จัดเก็บข้อมูลของคุณได้แบบไดนามิก
ดังที่กล่าวมาเพื่อให้เข้าใจแนวคิดที่อยู่เบื้องหลังพารามิเตอร์ $ คลี่คลายก่อนอื่นคุณต้องเข้าใจว่ากรณีการใช้งานที่คุณพยายามอ้างนั้นพูดถึงอะไร ตัวอย่างเอกสารจากmongodb.orgมีดังนี้:
{
title : "this is my title" ,
author : "bob" ,
posted : new Date () ,
pageViews : 5 ,
tags : [ "fun" , "good" , "fun" ] ,
comments : [
{ author :"joe" , text : "this is cool" } ,
{ author :"sam" , text : "this is bad" }
],
other : { foo : 5 }
}
สังเกตว่าแท็กเป็นอาร์เรย์ 3 รายการในกรณีนี้คือ "สนุก" "ดี" และ "สนุก"
สิ่งที่ $ คลี่คลายคืออนุญาตให้คุณลอกเอกสารสำหรับแต่ละองค์ประกอบและส่งคืนเอกสารผลลัพธ์นั้น หากต้องการคิดแบบนี้ในวิธีการแบบคลาสสิกมันจะเท่ากับ "สำหรับแต่ละรายการในอาร์เรย์แท็กให้ส่งคืนเอกสารที่มีเฉพาะรายการนั้น"
ดังนั้นผลลัพธ์ของการรันสิ่งต่อไปนี้:
db.article.aggregate(
{ $project : {
author : 1 ,
title : 1 ,
tags : 1
}},
{ $unwind : "$tags" }
);
จะส่งคืนเอกสารต่อไปนี้:
{
"result" : [
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "good"
},
{
"_id" : ObjectId("4e6e4ef557b77501a49233f6"),
"title" : "this is my title",
"author" : "bob",
"tags" : "fun"
}
],
"OK" : 1
}
สังเกตว่าสิ่งเดียวที่เปลี่ยนแปลงในอาร์เรย์ผลลัพธ์คือสิ่งที่จะถูกส่งกลับในค่าแท็ก หากคุณจำเป็นต้องอ้างอิงเพิ่มเติมเกี่ยวกับวิธีการทำงานนี้เราได้รวมการเชื่อมโยงที่นี่ หวังว่านี่จะช่วยได้และขอให้โชคดีกับการจู่โจมของคุณในระบบ NoSQL ที่ดีที่สุดที่ฉันเคยเจอมา