Mongodb Primary Key: Παράδειγμα για να ορίσετε το πεδίο _id με το ObjectId()
⚡ Έξυπνη Σύνοψη
MongoDB Το Πρωτεύον Κλειδί είναι το πεδίο _id που προσδιορίζει μοναδικά κάθε έγγραφο σε μια συλλογή. Από προεπιλογή, περιέχει ένα αυτόματα δημιουργημένο ObjectId, αλλά μπορείτε επίσης να αντιστοιχίσετε τη δική σας τιμή στο πεδίο _id κατά την εισαγωγή ενός εγγράφου.

Τι είναι το πρωτεύον κλειδί MongoDB?
In MongoDB, το πεδίο _id ως πρωτεύον κλειδί για τη συλλογή, έτσι ώστε κάθε έγγραφο να μπορεί να προσδιορίζεται μοναδικά στη συλλογή. Το πεδίο _id περιέχει μια μοναδική τιμή ObjectID.
Από προεπιλογή κατά την εισαγωγή εγγράφων στη συλλογή, εάν δεν προσθέσετε ένα όνομα πεδίου με το _id στο όνομα του πεδίου, τότε MongoDB θα προσθέσει αυτόματα ένα πεδίο αναγνωριστικού αντικειμένου όπως φαίνεται παρακάτω
Όταν υποβάλλετε ερώτημα στα έγγραφα σε μια συλλογή, μπορείτε να δείτε το ObjectId για κάθε έγγραφο της συλλογής.
Αν θέλετε να το εξασφαλίσετε MongoDB δεν δημιουργεί το πεδίο _id όταν δημιουργείται η συλλογή και αν θέλετε να καθορίσετε το δικό σας αναγνωριστικό ως _id της συλλογής, τότε θα πρέπει να το ορίσετε ρητά κατά τη δημιουργία της συλλογής.
Όταν δημιουργείτε ρητά ένα πεδίο id, πρέπει να δημιουργείται με _id στο όνομά του.
Ας δούμε ένα παράδειγμα για το πώς μπορούμε να το πετύχουμε αυτό.
db.Employee.insert({_id:10, "EmployeeName" : "Smith"})
Code Επεξήγηση:
- Υποθέτουμε ότι δημιουργούμε το πρώτο έγγραφο στη συλλογή και, ως εκ τούτου, στην παραπάνω δήλωση κατά τη δημιουργία της συλλογής, ορίζουμε ρητά το πεδίο _id και ορίζουμε μια τιμή για αυτό.
Εάν η εντολή εκτελεστεί με επιτυχία και χρησιμοποιήστε τώρα την εντολή find για να εμφανίσετε τα έγγραφα στη συλλογή, θα εμφανιστεί η ακόλουθη έξοδος
Παραγωγή:
Η έξοδος δείχνει ξεκάθαρα ότι το πεδίο _id που ορίσαμε κατά τη δημιουργία της συλλογής χρησιμοποιείται τώρα ως το πρωτεύον κλειδί για τη συλλογή.
Τι είναι το ObjectId στο MongoDB?
Ένα ObjectId είναι ο προεπιλεγμένος τύπος τιμής που MongoDB αντιστοιχίζει στο πρωτεύον κλειδί _id. Είναι ένα αναγνωριστικό 12 byte που έχει σχεδιαστεί για να είναι παγκοσμίως μοναδικό σε όλους τους διακομιστές και τις συλλογές, επομένως δύο έγγραφα σχεδόν ποτέ δεν λαμβάνουν την ίδια τιμή. Επειδή το πρόγραμμα οδήγησης πελάτη μπορεί να δημιουργήσει ένα ObjectId χωρίς να ρωτήσει τον διακομιστή, MongoDB μπορεί να εισάγει έγγραφα γρήγορα και να κλιμακωθεί σε πολλά μηχανήματα χωρίς κεντρικό μετρητή.
Κάθε ObjectId αποθηκεύεται σε συμπαγή δυαδική μορφή, αλλά εμφανίζεται ως δεκαεξαδική συμβολοσειρά 24 χαρακτήρων, για παράδειγμα ObjectId(“507f1f77bcf86cd799439011”). Τα πρώτα byte βασίζονται στην τρέχουσα ώρα, πράγμα που σημαίνει ότι οι τιμές αυξάνονται σταθερά καθώς δημιουργούνται έγγραφα. Αυτό καθιστά το ObjectId όχι μόνο μοναδικό αλλά και χονδρικά ταξινομήσιμο κατά σειρά εισαγωγής, μια χρήσιμη ιδιότητα όταν θέλετε πρώτα τις νεότερες ή παλαιότερες εγγραφές.
Δομή ενός MongoDB ObjectId
A MongoDB Το ObjectId έχει μήκος ακριβώς 12 byte και κάθε μέρος έχει μια συγκεκριμένη σημασία. Η κατανόηση της δομής βοηθά στην εξήγηση του γιατί τα ObjectId είναι μοναδικά και χρονικά ταξινομημένα:
- Χρονική σήμανση 4 byte: Ο αριθμός των δευτερολέπτων από την εποχή του Unix, καταγράφοντας πότε δημιουργήθηκε το ObjectId. Αυτό καθιστά τα ID ταξινομήσιμα κατά χρόνο.
- Τυχαία τιμή 5 byte: Μια τιμή που παράγεται μία φορά ανά διεργασία, συνδυάζοντας την ταυτότητα του μηχανήματος και της διεργασίας, έτσι ώστε διαφορετικοί πελάτες να παράγουν διαφορετικά αναγνωριστικά.
- Μετρητής αύξησης 3 byte: Ένας μετρητής που ξεκινά από μια τυχαία τιμή και αυξάνεται με κάθε νέο ObjectId στο ίδιο δευτερόλεπτο, αποτρέποντας τις συγκρούσεις κατά τη διάρκεια γρήγορων εισαγωγών.
Μαζί, αυτά τα τρία μέρη εγγυώνται ότι κάθε ObjectId είναι μοναδικό, ακόμα και όταν πολλά έγγραφα εισάγονται ταυτόχρονα σε διαφορετικούς διακομιστές. Μπορείτε να διαβάσετε την ενσωματωμένη ώρα δημιουργίας ανά πάσα στιγμή καλώντας τη μέθοδο getTimestamp() σε ένα ObjectId.
Πλεονεκτήματα της χρήσης του ObjectId ως πρωτεύοντος κλειδιού
Η χρήση του προεπιλεγμένου ObjectId ως πρωτεύοντος κλειδιού _id προσφέρει πολλά πρακτικά οφέλη, γι' αυτό και οι περισσότεροι MongoDB Οι συλλογές βασίζονται σε αυτό:
- Αυτόματη παραγωγή: Δεν χρειάζεται να δημιουργείτε ή να διαχειρίζεστε μόνοι σας τιμές κλειδιών, μειώνοντας έτσι την πιθανότητα διπλότυπων κλειδιών.
- Παγκόσμια μοναδικότητα: Τα ObjectIds παραμένουν μοναδικά σε όλους τους διακομιστές, επομένως λειτουργούν καλά σε κατανεμημένες και sharded αναπτύξεις.
- Ενσωματωμένη χρονική σήμανση: Η ενσωματωμένη ώρα δημιουργίας σάς επιτρέπει να ταξινομείτε ή να φιλτράρετε έγγραφα κατά ηλικία χωρίς επιπλέον πεδίο ημερομηνίας.
- Υψηλή απόδοση: Η δημιουργία από την πλευρά του πελάτη αποφεύγει την επιστροφή στον διακομιστή, διατηρώντας παράλληλαping εισάγεται γρήγορα.
Ενώ το ObjectId ταιριάζει στις περισσότερες εφαρμογές, μπορείτε να επιλέξετε ένα προσαρμοσμένο _id, όπως μια διεύθυνση email ή έναν κωδικό προϊόντος, όταν ένα φυσικό κλειδί επιχείρησης απλοποιεί τα ερωτήματα. Η σωστή επιλογή εξαρτάται από τον τρόπο με τον οποίο σκοπεύετε να αναζητήσετε και να συσχετίσετε τα δεδομένα σας.


