MongoDB พอลิเมอ
MongoDB polymerized (รวม) เป็นหลักสำหรับการประมวลผลข้อมูล (เช่นค่าเฉลี่ยสถิติจำนวนเงิน, ฯลฯ ) และผลตอบแทนของข้อมูลจากการคำนวณที่ ที่คล้ายกันค่อนข้างนับคำสั่ง SQL (*)
รวม () วิธีการ
MongoDB วิธีการใช้พอลิเมอรวม ()
ไวยากรณ์
ไวยากรณ์รวมพื้นฐาน () วิธีการดังต่อไปนี้:
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
ตัวอย่าง
การเก็บรวบรวมข้อมูลเป็นดังนี้:
{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'w3cschool.cc', url: 'http://www.w3cschool.cc', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'w3cschool.cc', url: 'http://www.w3cschool.cc', tags: ['mongodb', 'database', 'NoSQL'], likes: 10 }, { _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: ['neo4j', 'database', 'NoSQL'], likes: 750 },
ตอนนี้เราตั้งค่าดังกล่าวข้างต้นจะถูกคำนวณสำหรับแต่ละจำนวนบทความที่เขียนโดยผู้เขียนใช้รวม () คำนวณดังนี้
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) { "result" : [ { "_id" : "w3cschool.cc", "num_tutorial" : 2 }, { "_id" : "Neo4j", "num_tutorial" : 1 } ], "ok" : 1 } >
ตัวอย่างที่คล้ายกันข้างต้นคำสั่ง SQL: เลือก by_user นับ (*) จากกลุ่ม mycol โดย by_user
ในตัวอย่างข้างต้นเรา by_user สนามโดยสนามให้กับกลุ่มข้อมูลและคำนวณผลรวมของค่าเดียวกัน by_user สนาม
ตารางต่อไปนี้แสดงให้เห็นถึงการแสดงออกรวมบางส่วน:
การแสดงออก | ลักษณะ | ตัวอย่าง |
---|---|---|
$ ซำ | คำนวณผลรวม | db.mycol.aggregate ([{$ กลุ่ม: {_id: "$ by_user" num_tutorial: {$ รวม: "$ ชอบ"}}}]) |
$ เฉลี่ย | การคำนวณค่าเฉลี่ย | db.mycol.aggregate ([{$ กลุ่ม: {_id: "$ by_user" num_tutorial: {$ เฉลี่ย: "$ ชอบ"}}}]) |
$ นาที | ได้รับการเก็บรวบรวมเอกสารทั้งหมดที่สอดคล้องต่ำสุดคุ้มค่า | db.mycol.aggregate ([{$ กลุ่ม: {_id: "$ by_user" num_tutorial: {$ นาที: "$ ชอบ"}}}]) |
$ แม็กซ์ | ได้รับคอลเลกชันของเอกสารทั้งหมดที่สอดคล้องกับมูลค่าสูงสุด | db.mycol.aggregate ([{$ กลุ่ม: {_id: "$ by_user" num_tutorial: {$ Max: "$ ชอบ"}}}]) |
$ กด | ในเอกสารที่เกิดการแทรกค่าลงในอาร์เรย์ | db.mycol.aggregate ([{$ กลุ่ม: {_id: "$ by_user" URL: {$ ผลักดัน: "$ URL"}}}]) |
$ AddToSet | ในเอกสารที่เกิดการแทรกค่าลงในอาร์เรย์ แต่ไม่ได้สร้างสำเนา | db.mycol.aggregate ([{$ กลุ่ม: {_id: "$ by_user" URL: {$ addToSet: "$ URL"}}}]) |
$ แรก | เป็นข้อมูลเอกสารแรกตามเอกสารทรัพยากรการจัดเรียง | db.mycol.aggregate ([{$ กลุ่ม: {_id: "$ by_user" first_url: {$ ครั้งแรก: "$ URL"}}}]) |
$ ล่าสุด | ได้รับข้อมูลเอกสารที่ผ่านมาตามเอกสารทรัพยากรการจัดเรียง | db.mycol.aggregate ([{$ กลุ่ม: {_id: "$ by_user" last_url: {$ ล่าสุด: "$ URL"}}}]) |
แนวคิดของท่อ
ท่อใน Unix และ Linux โดยทั่วไปจะใช้ในการส่งออกคำสั่งปัจจุบันเป็นพารามิเตอร์คำสั่งต่อไป
MongoDB MongoDB ท่อพอลิเมอเอกสารในท่อหลังจากผลมาประมวลผลเพื่อการประมวลผลท่อต่อไป การดำเนินการทางท่อสามารถทำซ้ำได้
นิพจน์: การป้อนข้อมูลการประมวลผลและการส่งออกเอกสาร การแสดงออกเป็นไร้สัญชาติเท่านั้นที่สามารถใช้ในการคำนวณท่อปัจจุบันของเอกสารรวมคุณไม่สามารถจัดการกับเอกสารอื่น ๆ
ที่นี่เราแนะนำกรอบการรวมตัวที่ใช้กันทั่วไปในการดำเนินงานหลายประการ:
- $ โครงการ: การปรับเปลี่ยนโครงสร้างของเอกสารการป้อนข้อมูล สามารถใช้ในการเปลี่ยนชื่อเพิ่มหรือเอาเขตข้อมูลก็ยังสามารถนำมาใช้ในการสร้างการคำนวณและเอกสารที่ซ้อนกัน
- $ Match: ใช้ในการกรองข้อมูลเฉพาะการส่งออกของเอกสารที่มีคุณภาพ $ Match ใช้ MongoDB ประกอบแบบสอบถามมาตรฐาน
- $ จำกัด การ จำกัด จำนวนของเอกสาร MongoDB พอลิเมอท่อกลับ
- $ ข้ามข้ามจำนวนที่ระบุในเอกสารในท่อพอลิเมอและผลตอบแทนส่วนที่เหลือของเอกสาร
- $ ผ่อนคลาย: เอกสารถูกแบ่งออกเป็นอาร์เรย์ของข้อมูลพิมพ์ลงในหลายแต่ละอาร์เรย์ที่มีค่า
- $ กลุ่ม: คอลเลกชันของเอกสารการจัดกลุ่มสามารถนำมาใช้เพื่อให้ได้ผลลัพธ์ทางสถิติ
- $ ค้นหา: ออกเอกสารการป้อนข้อมูลหลังจากการสั่งซื้อ
- $ GeoNear: จัดลำดับออกเอกสารใกล้เคียงกับที่ตั้งทางภูมิศาสตร์
ตัวอย่างของผู้ประกอบการท่อ
1, $ ตัวอย่างโครงการ
db.article.aggregate( { $project : { title : 1 , author : 1 , }} );
ในกรณีนี้ผลจะมี _id, tilte และผู้เขียนสามช่องฟิลด์ _id เริ่มต้นคือการจะรวมถ้าสั่งไม่ได้มี _id ถ้ามันสามารถ:
db.article.aggregate( { $project : { _id : 0 , title : 1 , author : 1 }});
2. ตัวอย่างการแข่งขัน $
db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );
$ Match ถูกนำมาใช้เพื่อให้ได้คะแนนมากกว่า 70 น้อยกว่าหรือเท่ากับ 90 บันทึกแล้วบันทึกที่ตรงกันกับขั้นตอนต่อไปของผู้ประกอบการกลุ่มท่อ $ สำหรับการประมวลผล
3. $ ข้ามเช่น
db.article.aggregate( { $skip : 5 });
หลังจากที่ผู้ประกอบการประมวลผลท่อ $ เฮี๊ยบเอกสารครั้งแรกห้าเป็น "กรอง" ออก