Erstellen von Mehrfeldindizes in Mongoose / MongoDB

93

Ich versuche vergeblich, eine Dokumentation zum Erstellen von Mehrfeldindizes in Mongoosejs zu finden. Insbesondere habe ich zwei Felder, die indiziert und eindeutig sein müssen. Was ist ein Beispiel für ein Mungoschema, das zwei Felder zusammen indiziert?

Dan
quelle

Antworten:

193

Sie rufen die indexMethode für Ihr SchemaObjekt auf, um dies wie hier gezeigt zu tun . Für Ihren Fall wäre es so etwas wie:

mySchema.index({field1: 1, field2: 1}, {unique: true});
JohnnyHK
quelle
2
Dies wird in Mongodb als Compount Index bezeichnet. Es werden also Indizes wie Feld1 und Feld1 + Feld2 erstellt. Es ist also zuerst ein Index gemäß Feld1 und dann innerhalb von Feld1 in Bezug auf Feld 2
Ketan Ghumatkar
1
Was bedeutet die 1 nach Feld1: und Feld2 :?
Damon Yuan
8
@DamonYuan Sie legen die Sortierreihenfolge der Felder im Index fest. 1steigt auf, -1würde absteigen.
JohnnyHK
1
@KetanGhumatkar Es basiert auf der Reihenfolge, in der die Felder im Objekt des Aufrufs an aufgelistet sind index.
JohnnyHK
2
1und -1 gibt einen aufsteigenden oder einen absteigenden Indexschlüssel im Indexfeld an. Ich fand Dokumente http://mongodb.github.io/node-mongodb-native/2.1/tutorials/create-indexes/
Thai Ha
11

Das Definieren von Indizes auf Schemaebene ist beim Erstellen zusammengesetzter Indizes erforderlich.

animalSchema.index({ name: 1, type: -1 });

Referenz: http://mongoosejs.com/docs/guide.html#indexes

Krumb
quelle
5
Was bedeutet 1 und -1? Ich konnte dies in der Dokumentation, auf die Sie verwiesen haben, nicht finden. Vielen Dank.
DFB
2
Ich habe die Antwort auf dieser Seite gefunden: docs.mongodb.org/manual/core/indexes-introduction Danke!
DFB
0

Übrigens ist die akzeptierte Antwort falsch. Gemäß https://stackoverflow.com/a/52553550/129300 sollten Sie die Feldnamen in einfache Anführungszeichen setzen, dh:

mySchema.index({'field1': 1, 'field2': 1}, {unique: true});

Glücklicher Tag!

Fer Martin
quelle
Objektschlüssel in JS können nicht in Anführungszeichen gesetzt werden, solange sie syntaktisch gültige Bezeichner sind. field1und field2sind gültige Bezeichner. field1.fooist zum Beispiel nicht.
Gus
-3
    Following command can be used to create compound index for nested json:
    db.ACCOUNT_collection.createIndex({"account.id":1,"account.customerId":1},{unique:1}) 
Mongo json structure is like :
{"_id":"648738"
 "account": { 
    "id": "123",
    "customerId": 7879,
    "name": "test"
   ..
   ..

  }
}

Ich habe mit Beispieldaten getestet, dass es wie erwartet perfekt funktioniert.

Rajeev Rathor
quelle
Wir wollen das nicht mit der Mungoschale, wir wollen das mit dem Knoten js Schema
Rohit Nishad