Criação de índices de vários campos no Mongoose / MongoDB

93

Estou tentando encontrar documentação, sem sucesso, sobre como criar índices de vários campos no Mongoosejs. Em particular, tenho dois campos que precisam ser indexados e exclusivos. Qual é um exemplo de esquema de mangusto que indexa dois campos juntos?

Dan
fonte

Respostas:

195

Você chama o indexmétodo em seu Schemaobjeto para fazer isso, conforme mostrado aqui . Para o seu caso, seria algo como:

mySchema.index({field1: 1, field2: 1}, {unique: true});
JohnnyHK
fonte
2
Isso é chamado de Índice Compount em mongodb. Portanto, ele cria índices como campo1 e campo1 + campo2. Portanto, é o primeiro índice de acordo com o campo1 e, em seguida, dentro do campo1 em relação ao campo 2
Ketan Ghumatkar
1
qual é o significado de 1 após campo1: e campo2:?
Damon Yuan
9
@DamonYuan Eles definem a ordem de classificação dos campos no índice. 1é ascendente, -1seria descendente.
JohnnyHK
1
@KetanGhumatkar É baseado na ordem em que os campos são listados no objeto na chamada para index.
JohnnyHK
2
1e -1 especifica uma chave de índice crescente ou decrescente no campo de índice. Encontrei os documentos http://mongodb.github.io/node-mongodb-native/2.1/tutorials/create-indexes/
Thai Ha
0

A propósito, a resposta aceita está errada, conforme https://stackoverflow.com/a/52553550/129300 você deve colocar os nomes dos campos entre aspas simples, ou seja:

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

Dia feliz!

Fer Martin
fonte
As chaves de objeto em JS podem ser removidas das aspas, desde que sejam identificadores sintaticamente válidos. field1e field2são identificadores válidos. field1.foonão é, por exemplo.
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"
   ..
   ..

  }
}

Eu testei com dados de amostra e está funcionando perfeitamente como o esperado.

Rajeev Rathor
fonte
Não queremos isso com o shell mongooses, queremos isso com o esquema node js
Rohit Nishad