Συγκέντρωση ομάδας MongoDB

Synkentrose Omadas Mongodb



Η συγκέντρωση είναι η διαδικασία εξαγωγής δεδομένων από μια συλλογή MongoDB. Επεξεργάζεται πολλά έγγραφα και παρέχει εκτιμώμενα αποτελέσματα. Η συγκέντρωση στο MongoDB έχει πολλούς τελεστές και μεθόδους που εκτελούν διάφορες εργασίες. Μεταξύ αυτών των τελεστών, ο τελεστής $group ομαδοποιεί τα έγγραφα για κάθε μοναδική ομαδοποίηση και τα ταξινομεί σύμφωνα με μια έκφραση που ορίζεται. Ο χειριστής του ομίλου είναι σημαντικός στο MongoDB, καθώς διευκολύνει ένα ευρύ φάσμα χειρισμών δεδομένων. Η συγκέντρωση $group στο παράδειγμα MongoDB μαζί με διαφορετικούς συσσωρευτές παρέχεται παρακάτω.

Πώς λειτουργεί η συγκέντρωση ομάδων στο MongoDB;

Ο τελεστής $group θα πρέπει να χρησιμοποιηθεί για την ομαδοποίηση των εγγράφων εισόδου σύμφωνα με την καθορισμένη έκφραση _id. Στη συνέχεια, θα πρέπει να επιστρέψει ένα έγγραφο με τις συνολικές τιμές για κάθε ξεχωριστή ομάδα. Για να ξεκινήσουμε με την υλοποίηση, δημιουργήσαμε τη συλλογή «Βιβλία» στο MongoDB. Μετά τη δημιουργία της συλλογής «Βιβλία», έχουμε εισαγάγει τα έγγραφα που σχετίζονται με τα διάφορα πεδία. Τα έγγραφα εισάγονται στη συλλογή μέσω της μεθόδου insertMany() καθώς το ερώτημα που θα εκτελεστεί φαίνεται παρακάτω.

>db.Books.insertMany([

{
_id:1,
τίτλος: 'Άννα Καρένινα',
τιμή: 290,
έτος: 1879,
order_status: 'σε απόθεμα',
συντάκτης: {
'όνομα':'Λέων Τολστόι'
}
},
{
_id:2,
τίτλος: 'To Kill a Mockingbird',
τιμή: 500,
έτος:  1960,
order_status: 'εκτός αποθέματος',
συντάκτης: {
'name': 'Harper Lee'
}
},
{
_id:3,
τίτλος: 'Invisible Man',
τιμή: 312,
έτος: 1953,
order_status: 'In-Stock',
συντάκτης: {
'όνομα':'Ραλφ Έλισον'
}
},
{
_id:4,
τίτλος: 'Αγαπημένη',
τιμή: 370,
έτος:  1873,
order_status: 'out_of_stock',
συντάκτης: {
'όνομα':'Τόνι Μόρισον'
}
},
{
_id:5,
τίτλος: 'Things Fall Apart',
τιμή: 200,
έτος:  1958,
order_status: 'In-Stock',
συντάκτης: {
'name':'Chinua Achebe'
}
},
{
_id:6,
τίτλος: 'The Color Purple',
τιμή: 510,
έτος:  1982,
order_status: 'εκτός αποθέματος',
συντάκτης: {
'name':'Alice Walker'
}
}
])

Τα έγγραφα αποθηκεύονται επιτυχώς στη συλλογή 'Βιβλία' χωρίς να παρουσιαστεί κανένα σφάλμα επειδή η έξοδος αναγνωρίζεται ως 'αληθής'. Τώρα, θα χρησιμοποιήσουμε αυτά τα έγγραφα της συλλογής 'Βιβλία' για την εκτέλεση της συνάθροισης '$group'.









Παράδειγμα # 1: Χρήση του $group Aggregation



Η απλή χρήση της συνάθροισης $group παρουσιάζεται εδώ. Η συγκεντρωτική εισαγωγή ερωτήματος πρώτα στον τελεστή '$group' και μετά ο τελεστής '$group' παίρνει περαιτέρω τις εκφράσεις για να δημιουργήσει τα ομαδοποιημένα έγγραφα.





>db.Books.agregate([

{ $group:{ _id:'$author.name'} }

])

Το παραπάνω ερώτημα του τελεστή $group καθορίζεται με το πεδίο '_id' για τον υπολογισμό των συνολικών τιμών για όλα τα έγγραφα εισόδου. Στη συνέχεια, το πεδίο '_id' εκχωρείται με το '$author.name' που σχηματίζει μια διαφορετική ομάδα στο πεδίο '_id'. Οι ξεχωριστές τιμές του $author.name θα επιστραφούν επειδή δεν υπολογίζουμε συσσωρευμένες τιμές. Η εκτέλεση του συνολικού ερωτήματος $group έχει την ακόλουθη έξοδο. Το πεδίο _id έχει τις τιμές του author.names.



Παράδειγμα # 2: Χρήση της συνάθροισης $group με το $push Accumulator

Το παράδειγμα της συνάθροισης $group χρησιμοποιεί οποιονδήποτε συσσωρευτή που αναφέρεται ήδη παραπάνω. Αλλά μπορούμε να χρησιμοποιήσουμε τους συσσωρευτές σε συνάθροιση ομάδας $. Οι τελεστές συσσωρευτή είναι εκείνοι που χρησιμοποιούνται σε πεδία εγγράφου εισόδου εκτός από αυτούς που «ομαδοποιούνται» στο «_id». Ας υποθέσουμε ότι θέλουμε να ωθήσουμε τα πεδία της έκφρασης σε έναν πίνακα, τότε ο συσσωρευτής '$push' καλείται στον τελεστή '$group'. Το παράδειγμα θα σας βοηθήσει να κατανοήσετε πιο καθαρά τον συσσωρευτή '$push' της '$group'.

>db.Books.agregate(

[

{ $group : { _id : '$_id', έτος: { $push: '$year' } }

]

).αρκετά();

Εδώ, θέλουμε να ομαδοποιήσουμε την ημερομηνία του έτους έκδοσης των δεδομένων βιβλίων στον πίνακα. Το παραπάνω ερώτημα θα πρέπει να εφαρμοστεί για να επιτευχθεί αυτό. Το ερώτημα συνάθροισης παρέχεται με την έκφραση όπου ο τελεστής '$group' παίρνει την έκφραση πεδίου '_id' και την έκφραση πεδίου 'year' για να πάρει το έτος ομάδας χρησιμοποιώντας τον συσσωρευτή $push. Η έξοδος που ανακτάται από αυτό το συγκεκριμένο ερώτημα δημιουργεί τον πίνακα πεδίων έτους και αποθηκεύει το επιστρεφόμενο ομαδοποιημένο έγγραφο μέσα σε αυτό.

Παράδειγμα # 3: Χρήση της συνάθροισης ομάδας $ με τον συσσωρευτή '$min'.

Στη συνέχεια, έχουμε τον συσσωρευτή '$min' που χρησιμοποιείται στη συγκέντρωση $group για να λάβουμε την ελάχιστη τιμή αντιστοίχισης από κάθε έγγραφο της συλλογής. Η έκφραση ερωτήματος για τον συσσωρευτή $min δίνεται παρακάτω.

>db.Books.agregate([

{
$group:{
_ταυτότητα:{
τίτλος: '$title',
order_status: '$order_status'
},
minPrice:{$min: '$price'}
}
}
])

Το ερώτημα έχει την έκφραση συγκέντρωσης '$group' όπου έχουμε ομαδοποιήσει το έγγραφο για τα πεδία 'title' και 'order_status'. Στη συνέχεια, παρέχουμε τον συσσωρευτή $min που ομαδοποίησε τα έγγραφα λαμβάνοντας τις ελάχιστες τιμές τιμής από τα μη ομαδοποιημένα πεδία. Όταν εκτελούμε αυτό το ερώτημα του $min accumulator παρακάτω, επιστρέφει τα ομαδοποιημένα έγγραφα κατά τίτλο και order_status σε μια ακολουθία. Η ελάχιστη τιμή εμφανίζεται πρώτη και η υψηλότερη τιμή του εγγράφου τοποθετείται τελευταία.

Παράδειγμα # 4: Χρησιμοποιήστε το $group Aggregation με το $sum Accumulator

Για να λάβετε το άθροισμα όλων των αριθμητικών πεδίων χρησιμοποιώντας τον τελεστή $group, αναπτύσσεται η λειτουργία $sum accumulator. Οι μη αριθμητικές τιμές στις συλλογές λαμβάνονται υπόψη από αυτόν τον συσσωρευτή. Επιπλέον, χρησιμοποιούμε τη συγκέντρωση $match εδώ με τη συγκέντρωση $group. Η συνάθροιση $match αποδέχεται τις συνθήκες ερωτήματος που δίνονται σε ένα έγγραφο και μεταβιβάζει το αντιστοιχισμένο έγγραφο στη συνάθροιση ομάδας $, η οποία στη συνέχεια επιστρέφει το άθροισμα του εγγράφου για κάθε ομάδα. Για τον συσσωρευτή $sum, το ερώτημα παρουσιάζεται παρακάτω.

>db.Books.agregate([

{ $match:{ order_status:'In-Stock'}},

{ $group:{ _id:'$author.name', totalBooks: { $sum:1 } }

}])

Το παραπάνω ερώτημα συνάθροισης ξεκινά με τον τελεστή $match που ταιριάζει με όλα τα 'order_status' του οποίου η κατάσταση είναι 'In-Stock' και μεταβιβάζεται στην ομάδα $ ως είσοδο. Στη συνέχεια, ο τελεστής $group έχει την έκφραση του συσσωρευτή $sum που εξάγει το άθροισμα όλων των βιβλίων στο απόθεμα. Σημειώστε ότι το '$sum:1' προσθέτει 1 σε κάθε έγγραφο που ανήκει στην ίδια ομάδα. Η έξοδος εδώ έδειξε μόνο δύο ομαδοποιημένα έγγραφα που έχουν την 'κατάσταση_παραγγελίας' που σχετίζεται με το 'In-Stock'.

Παράδειγμα # 5: Χρησιμοποιήστε το $group Aggregation με το $sort Aggregation

Ο τελεστής $group εδώ χρησιμοποιείται με τον τελεστή '$sort' που χρησιμοποιείται για την ταξινόμηση των ομαδοποιημένων εγγράφων. Το ακόλουθο ερώτημα περιλαμβάνει τρία βήματα για τη λειτουργία ταξινόμησης. Πρώτα είναι το στάδιο $match, μετά το στάδιο $ομάδας και τελευταίο είναι το στάδιο $sort που ταξινομεί το ομαδοποιημένο έγγραφο.

>db.Books.agregate([

{ $match:{ order_status:'out-of-tock'}},

{ $group:{ _id:{ authorName :'$author.name'}, totalBooks: { $sum:1} } },

{ $sort:{Όνομα συγγραφέα:1}}

])

Εδώ, έχουμε ανακτήσει το αντιστοιχισμένο έγγραφο του οποίου το 'order_status' δεν είναι διαθέσιμο. Στη συνέχεια, το αντίστοιχο έγγραφο εισάγεται στο στάδιο $group, το οποίο ομαδοποίησε το έγγραφο με το πεδίο 'authorName' και το 'totalBooks'. Η έκφραση $group συσχετίζεται με τον συσσωρευτή $sum με τον συνολικό αριθμό βιβλίων που δεν είναι διαθέσιμα. Στη συνέχεια, τα ομαδοποιημένα έγγραφα ταξινομούνται με την έκφραση $sort σε αύξουσα σειρά καθώς το '1' εδώ υποδεικνύει την αύξουσα σειρά. Το ταξινομημένο έγγραφο ομάδας με την καθορισμένη σειρά λαμβάνεται στην ακόλουθη έξοδο.

Παράδειγμα # 6: Χρησιμοποιήστε τη συγκέντρωση $group για διακριτή τιμή

Η διαδικασία συνάθροισης ομαδοποιεί επίσης τα έγγραφα ανά στοιχείο χρησιμοποιώντας τον τελεστή $group για να εξαγάγετε τις διαφορετικές τιμές των στοιχείων. Ας έχουμε την έκφραση ερωτήματος αυτής της δήλωσης στο MongoDB.

>db.Books.aggregate( [ { $group : { _id : '$title' } } ] ).pretty();

Το ερώτημα συνάθροισης εφαρμόζεται στη συλλογή Βιβλία για να ληφθεί η διακριτή τιμή του εγγράφου ομάδας. Η ομάδα $ εδώ παίρνει την έκφραση _id η οποία εξάγει τις διακριτές τιμές καθώς έχουμε εισαγάγει το πεδίο 'title' σε αυτήν. Η έξοδος του εγγράφου ομάδας λαμβάνεται κατά την εκτέλεση αυτού του ερωτήματος που έχει την ομάδα ονομάτων τίτλων έναντι του πεδίου _id.

συμπέρασμα

Ο οδηγός είχε στόχο να καθαρίσει την έννοια του τελεστή συγκέντρωσης $group για την ομαδοποίηση του εγγράφου στη βάση δεδομένων MongoDB. Η συγκεντρωτική προσέγγιση MongoDB βελτιώνει τα φαινόμενα ομαδοποίησης. Η δομή σύνταξης του τελεστή $group παρουσιάζεται με τα παραδείγματα προγραμμάτων. Εκτός από το βασικό παράδειγμα των τελεστών $group, έχουμε επίσης χρησιμοποιήσει αυτόν τον τελεστή με ορισμένους συσσωρευτές όπως $push, $min, $sum και τελεστές όπως $match και $sort.