Wie setze ich einen Primärschlüssel in MongoDB?


78

Ich möchte eines meiner Felder als Primärschlüssel festlegen . Ich benutze MongoDB als mein NoSQL.

Antworten:


87

_idFeld ist für den Primärschlüssel in Mongodb reserviert, und das sollte ein eindeutiger Wert sein. Wenn Sie nichts festlegen, wird _ides automatisch mit "MongoDB Id Object" gefüllt. Sie können jedoch alle eindeutigen Informationen in dieses Feld eingeben.

Zusätzliche Informationen: http://www.mongodb.org/display/DOCS/BSON

Ich hoffe es hilft.


76
Dies antwortet in der Tat nicht auf how to set one of my fields as primary key, zum Beispiel: Ich möchte user_email als Schlüssel in Benutzersammlungen, aber wie man dieses Feld als Schlüssel und eindeutig
festlegt

3
Wie beantwortet dies die Frage?
Lokesh Sanapalli

Das Feld _id ist der Standardindex und muss eindeutig sein. Platzieren Sie daher die Daten, die Ihre eindeutige Einschränkung darstellen, in diesem Feld. ( docs.mongodb.com/master/indexes/#default-id-index )
Steven Scott

24

Die andere Möglichkeit besteht darin, Indexesfür Ihre Sammlung zu erstellen und sicherzustellen, dass sie einzigartig sind.

Weitere Informationen finden Sie unter folgendem Link

Ich finde das eigentlich ziemlich einfach und leicht zu implementieren.


3
"Die eindeutige Einschränkung für Indizes stellt sicher, dass nur ein Dokument einen Wert für ein Feld in einer Sammlung haben kann. Bei Sharded-Sammlungen können diese eindeutigen Indizes keine Eindeutigkeit erzwingen, da Einfüge- und Indizierungsvorgänge für jeden Shard lokal sind" - docs.mongodb.org/ Handbuch / Tutorial /…
JohnC

16

In mongodb _id ist das Feld für den Primärschlüssel reserviert. Mongodb verwendet einen internen ObjectId-Wert, wenn Sie ihn nicht in Ihrem Objekt definieren, und erstellt außerdem einen Index, um die Leistung sicherzustellen.

Sie können jedoch Ihren eigenen Wert für _id festlegen, und Mongodb verwendet ihn, anstatt einen für Sie zu erstellen. Und selbst wenn Sie mehrere Felder als Primärschlüssel verwenden möchten, können Sie ein Objekt verwenden:

{ _id : { a : 1, b: 1} }

Achten Sie beim Erstellen dieser IDs nur darauf, dass die Reihenfolge der Schlüssel (im Beispiel a und b) von Bedeutung ist. Wenn Sie sie vertauschen, wird dies als ein anderes Objekt betrachtet.


13

Wenn Sie wie RDBMS denken, können Sie keinen Primärschlüssel erstellen. Der Standardprimärschlüssel ist _id. Sie können jedoch einen eindeutigen Index erstellen . Beispiel ist unten.

db.members.createIndex( { "user_id": 1 }, { unique: true } )

db.members.insert({'user_id':1,'name':'nanhe'})

db.members.insert({'name':'kumar'})

db.members.find();

Die Ausgabe ist unten.

{"_id": ObjectId ("577f9cecd71d71fa1fb6f43a"), "user_id": 1, "name": "nanhe"}

{"_id": ObjectId ("577f9d02d71d71fa1fb6f43b"), "name": "kumar"}

Wenn Sie versuchen, dieselbe user_id einzufügen, löst mongodb einen Schreibfehler aus.

db.members.insert({'user_id':1,'name':'aarush'})

WriteResult ({"nInserted": 0, "writeError": {"code": 11000, "errmsg": "E11000-Fehlererfassung für doppelte Schlüssel: student.members index: user_id_1 dup key: {: 1.0}"}})


10

Einfach können Sie verwenden

db.collectionName.createIndex({urfield:1},{unique:true});

6

Eine Möglichkeit, dieses Verhalten zu erreichen, besteht darin, den Wert auf _iddas Feld (das in MongoDB für einen Primärschlüssel reserviert ist) zu setzen, basierend auf den benutzerdefinierten Feldern, die Sie als Primärschlüssel behandeln möchten.
dh wenn ich employee_idals Primärschlüssel möchte, dann zum Zeitpunkt der Erstellung des Dokuments in MongoDB; Weisen Sie den _idgleichen Wert wie den von zu employee_id.


3

Dies ist die Syntax zum Erstellen des Primärschlüssels

db. <sammlung> .createIndex (<Schlüssel- und Indextypspezifikation>, {unique: true})

Nehmen wir an, unsere Datenbank hat eine Sammlung mit dem Namen student und das Dokument hat den Schlüssel student_id, den wir benötigen, um einen Primärschlüssel zu erstellen . Dann sollte der Befehl wie folgt sein.

db.student.createIndex({student_id:1},{unique:true})

Sie können überprüfen, ob diese student_id als Primärschlüssel festgelegt wurde, indem Sie versuchen, der Schülersammlung einen doppelten Wert hinzuzufügen .

Bevorzugen Sie dieses Dokument für weitere Informationen https://docs.mongodb.com/manual/core/index-unique/#create-a-unique-index


3

http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/

Sie können diesen Link auch überprüfen und das _idFeld automatisch inkrementieren .


19
Beachten Sie, dass von Antworten nur mit Links abgeraten wird. SO-Antworten sollten der Endpunkt einer Suche nach einer Lösung sein (im Gegensatz zu einem weiteren Zwischenstopp von Referenzen, die im Laufe der Zeit veralten). Bitte fügen Sie hier eine eigenständige Zusammenfassung hinzu, wobei Sie den Link als Referenz behalten.
Kleopatra

4
Link ist jetzt unterbrochen, daher ist diese Antwort nutzlos
PeterM

2
Downvoted, da die Seite jetzt weiterleitet zu: docs.mongodb.com/manual/crud, in dem weder "auto" noch "inkrementieren" erwähnt werden.
Die Maus

2

Wenn Sie Mongo auf Meteor verwenden, können Sie Folgendes verwenden _ensureIndex:

CollectionName._ensureIndex({field:1 }, {unique: true});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.