Creazione di indici multifield in Mongoose / MongoDB


93

Sto cercando di trovare documentazione, inutilmente, su come creare indici multi-campo in Mongoosejs. In particolare ho due campi che devono essere indicizzati e univoci. Qual è un esempio di schema mangusta che indicizza due campi insieme?

Risposte:


196

Chiami il indexmetodo sul tuo Schemaoggetto per farlo come mostrato qui . Per il tuo caso sarebbe qualcosa del tipo:

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

2
Questo è chiamato Compount Index in mongodb. Quindi crea indici come campo1 e campo1 + campo2. Quindi è prima indice in base al campo1 e poi all'interno di campo1 rispetto al campo 2
Ketan Ghumatkar

1
qual è il significato di 1 dopo field1: e field2:?
Damon Yuan

9
@DamonYuan Hanno impostato l'ordinamento dei campi nell'indice. 1sta salendo, -1sarebbe discendente.
JohnnyHK

1
@KetanGhumatkar Si basa sull'ordine in cui i campi sono elencati nell'oggetto nella chiamata a index.
JohnnyHK

2
1e -1 specifica una chiave di indice crescente o decrescente nel campo dell'indice. Ho trovato i documenti http://mongodb.github.io/node-mongodb-native/2.1/tutorials/create-indexes/
Thai Ha


0

A proposito, la risposta accettata è sbagliata, come per https://stackoverflow.com/a/52553550/129300 dovresti racchiudere i nomi dei campi tra virgolette singole, ad esempio:

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

Giorno felice!


Le chiavi oggetto in JS possono essere non quotate purché siano identificatori sintatticamente validi. field1e field2sono identificatori validi. field1.foonon lo è, per esempio.
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"
   ..
   ..

  }
}

Ho testato con dati di esempio che funziona perfettamente come previsto.


Non lo vogliamo con la shell delle manguste, lo vogliamo con lo schema node js
Rohit Nishad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.