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.

Tauquir
quelle

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.

Sinan
quelle
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.

Amolgautam
quelle
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.

Ali
quelle
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}"}})

Nanhe Kumar
quelle
10

Einfach können Sie verwenden

db.collectionName.createIndex({urfield:1},{unique:true});
Abhijit Chakra
quelle
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.

codiacTushki
quelle
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

Menuka Ishan
quelle
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 .

Nancy Gupta
quelle
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});
Tincho825
quelle