Mongodb Primary Key: Παράδειγμα για να ορίσετε το πεδίο _id με το ObjectId()

⚡ Έξυπνη Σύνοψη

MongoDB Το Πρωτεύον Κλειδί είναι το πεδίο _id που προσδιορίζει μοναδικά κάθε έγγραφο σε μια συλλογή. Από προεπιλογή, περιέχει ένα αυτόματα δημιουργημένο ObjectId, αλλά μπορείτε επίσης να αντιστοιχίσετε τη δική σας τιμή στο πεδίο _id κατά την εισαγωγή ενός εγγράφου.

  • 🔑 Κύριος Βασικός Ρόλος: Το πεδίο _id είναι το πρωτεύον κλειδί που προσδιορίζει μοναδικά κάθε έγγραφο σε ένα MongoDB συλλογής.
  • 🆔 Προεπιλεγμένο αναγνωριστικό αντικειμένου: Αν παραλείψετε το _id, MongoDB προσθέτει αυτόματα μια μοναδική τιμή ObjectId 12 byte στο έγγραφο.
  • Χρονικά ταξινομημένο: Ένα ObjectId ξεκινά με μια χρονική σήμανση 4 byte, επομένως τα ID μπορούν να ταξινομηθούν κατά προσέγγιση με βάση τον χρόνο δημιουργίας.
  • ✍️ Προσαρμοσμένα κλειδιά: Μπορείτε να δώσετε τη δική σας τιμή _id, όπως έναν αριθμό ή μια συμβολοσειρά, κατά την εισαγωγή ενός εγγράφου.
  • 🔒 Αμετάβλητος: Μόλις οριστεί, η τιμή _id δεν μπορεί να αλλάξει. Πρέπει να την διαγράψετε και να την εισαγάγετε ξανά για να την αλλάξετε.

Τι είναι το πρωτεύον κλειδί MongoDB?

In MongoDB, το πεδίο _id ως πρωτεύον κλειδί για τη συλλογή, έτσι ώστε κάθε έγγραφο να μπορεί να προσδιορίζεται μοναδικά στη συλλογή. Το πεδίο _id περιέχει μια μοναδική τιμή ObjectID.

Από προεπιλογή κατά την εισαγωγή εγγράφων στη συλλογή, εάν δεν προσθέσετε ένα όνομα πεδίου με το _id στο όνομα του πεδίου, τότε MongoDB θα προσθέσει αυτόματα ένα πεδίο αναγνωριστικού αντικειμένου όπως φαίνεται παρακάτω

Κύριο κλειδί σε MongoDB

Όταν υποβάλλετε ερώτημα στα έγγραφα σε μια συλλογή, μπορείτε να δείτε το ObjectId για κάθε έγγραφο της συλλογής.

Αν θέλετε να το εξασφαλίσετε MongoDB δεν δημιουργεί το πεδίο _id όταν δημιουργείται η συλλογή και αν θέλετε να καθορίσετε το δικό σας αναγνωριστικό ως _id της συλλογής, τότε θα πρέπει να το ορίσετε ρητά κατά τη δημιουργία της συλλογής.

Όταν δημιουργείτε ρητά ένα πεδίο id, πρέπει να δημιουργείται με _id στο όνομά του.

Ας δούμε ένα παράδειγμα για το πώς μπορούμε να το πετύχουμε αυτό.

db.Employee.insert({_id:10, "EmployeeName" : "Smith"})

Code Επεξήγηση:

  1. Υποθέτουμε ότι δημιουργούμε το πρώτο έγγραφο στη συλλογή και, ως εκ τούτου, στην παραπάνω δήλωση κατά τη δημιουργία της συλλογής, ορίζουμε ρητά το πεδίο _id και ορίζουμε μια τιμή για αυτό.

Εάν η εντολή εκτελεστεί με επιτυχία και χρησιμοποιήστε τώρα την εντολή find για να εμφανίσετε τα έγγραφα στη συλλογή, θα εμφανιστεί η ακόλουθη έξοδος

Παραγωγή:

Κύριο κλειδί σε MongoDB

Η έξοδος δείχνει ξεκάθαρα ότι το πεδίο _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 ή έναν κωδικό προϊόντος, όταν ένα φυσικό κλειδί επιχείρησης απλοποιεί τα ερωτήματα. Η σωστή επιλογή εξαρτάται από τον τρόπο με τον οποίο σκοπεύετε να αναζητήσετε και να συσχετίσετε τα δεδομένα σας.

Συχνές Ερωτήσεις

Όχι. Το πεδίο _id είναι αμετάβλητο μόλις δημιουργηθεί ένα έγγραφο. Για να το αλλάξετε, πρέπει να διαγράψετε το υπάρχον έγγραφο και να εισαγάγετε ένα νέο με την επιθυμητή τιμή _id.

Το πεδίο _id δέχεται τους περισσότερους τύπους BSON, συμπεριλαμβανομένων των ObjectId, ακεραίων, συμβολοσειρών, ακόμη και ενσωματωμένων εγγράφων. Ο μόνος κανόνας είναι ότι η τιμή πρέπει να είναι μοναδική μέσα στη συλλογή και δεν μπορεί να είναι πίνακας.

Ναί. MongoDB δημιουργεί αυτόματα ένα μοναδικό ευρετήριο στο πεδίο _id για κάθε συλλογή. Αυτό το ευρετήριο δεν μπορεί να παραλειφθεί και πραγματοποιεί αναζητήσεις με βάση το πρωτεύον κλειδί πολύ γρήγορα.

Η Τεχνητή Νοημοσύνη μπορεί να εξηγήσει τη χρονική σήμανση ενός ObjectId, να δημιουργήσει κώδικα για να το εξηγήσει.tract χρόνος δημιουργίας με getTimestamp(), και μετατροπή ObjectIds σε συμβολοσειρές, helping Οι προγραμματιστές εντοπίζουν και κατανοούν τα αναγνωριστικά εγγράφων πιο γρήγορα.

Ναι. Η Τεχνητή Νοημοσύνη μπορεί να σας συμβουλεύσει εάν θα διατηρήσετε το προεπιλεγμένο ObjectId ή θα χρησιμοποιήσετε ένα προσαρμοσμένο _id, όπως ένα email ή UUID, με βάση τα μοτίβα ερωτημάτων σας, τις ανάγκες μοναδικότητας και τα σχέδια sharding.

Συνοψίστε αυτήν την ανάρτηση με: