Création d'index multi-champs dans Mongoose / MongoDB

93

J'essaie de trouver de la documentation, en vain, sur la façon de créer des index multi-champs dans Mongoosejs. En particulier, j'ai deux champs qui doivent être indexés et uniques. Qu'est-ce qu'un exemple de schéma de mangouste qui indexe deux champs ensemble?

Dan
la source

Réponses:

198

Vous appelez la indexméthode sur votre Schemaobjet pour faire cela comme indiqué ici . Pour votre cas, ce serait quelque chose comme:

mySchema.index({field1: 1, field2: 1}, {unique: true});
JohnnyHK
la source
2
C'est ce qu'on appelle l'indice Compount dans mongodb. Ainsi, il crée des index comme champ1 et champ1 + champ2. C'est donc d'abord un index selon le champ 1, puis à l'intérieur du champ 1 par rapport au champ 2
Ketan Ghumatkar
1
quelle est la signification du 1 après field1: et field2:?
Damon Yuan
9
@DamonYuan Ils définissent l'ordre de tri des champs de l'index. 1est ascendant, -1serait descendant.
JohnnyHK
1
@KetanGhumatkar Il est basé sur l'ordre dans lequel les champs sont répertoriés dans l'objet dans l'appel à index.
JohnnyHK
2
1et -1 spécifie une clé d'index croissante ou décroissante sur le champ d'index. J'ai trouvé des documents http://mongodb.github.io/node-mongodb-native/2.1/tutorials/create-indexes/
Thai Ha
11

La définition d'index au niveau du schéma est nécessaire lors de la création d'index composés.

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

Référence: http://mongoosejs.com/docs/guide.html#indexes

Krumb
la source
5
Quelle est la signification de 1 et -1? Je n'ai pas trouvé cela dans la documentation à laquelle vous avez fait référence. Merci.
DFB
2
J'ai trouvé la réponse sur cette page: docs.mongodb.org/manual/core/indexes-introduction Merci!
DFB
0

À propos, la réponse acceptée est fausse, selon https://stackoverflow.com/a/52553550/129300, vous devez envelopper les noms de champs entre guillemets simples, c'est-à-dire:

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

Bonne journée!

Fer Martin
la source
Les clés d'objet dans JS peuvent être sans guillemets tant qu'il s'agit d'identificateurs syntaxiquement valides. field1et field2sont des identifiants valides. field1.foon'est pas, par exemple.
Gus le
-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"
   ..
   ..

  }
}

J'ai testé avec des exemples de données, cela fonctionne parfaitement comme prévu.

Rajeev Rathor
la source
Nous ne voulons pas qu'avec le shell mangoustes, nous voulons qu'avec le schéma node js
Rohit Nishad