Tworzenie indeksów wielopola w Mongoose / MongoDB

93

Próbuję znaleźć dokumentację, bezskutecznie, na temat tworzenia indeksów wielopolowych w Mongoosejs. W szczególności mam dwa pola, które muszą być indeksowane i unikalne. Jaki jest przykładowy schemat mangusty, który indeksuje razem dwa pola?

Dan
źródło

Odpowiedzi:

197

Wywołujesz indexmetodę na swoim Schemaobiekcie, aby to zrobić, jak pokazano tutaj . W twoim przypadku byłoby to coś takiego:

mySchema.index({field1: 1, field2: 1}, {unique: true});
JohnnyHK
źródło
2
Nazywa się to indeksem Compount w mongodb. Tworzy więc indeksy jako field1 i field1 + field2. Jest to więc najpierw indeks według pola 1, a następnie wewnątrz pola 1 w odniesieniu do pola 2
Ketan Ghumatkar.
1
jakie jest znaczenie 1 po polu 1: i polu 2:?
Damon Yuan
9
@DamonYuan Ustawiają porządek sortowania pól w indeksie. 1wznosi się, -1będzie zstępował.
JohnnyHK
1
@KetanGhumatkar Jest to oparte na kolejności, w jakiej pola są wymienione w obiekcie w wywołaniu index.
JohnnyHK
2
1i -1 określa rosnący lub malejący klucz indeksu w polu indeksu. Znalazłem dokumenty http://mongodb.github.io/node-mongodb-native/2.1/tutorials/create-indexes/
Thai Ha
0

Nawiasem mówiąc, przyjęta odpowiedź jest błędna, ponieważ na https://stackoverflow.com/a/52553550/129300 należy zawijać nazwy pól w pojedyncze cudzysłowy, czyli:

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

Szczęśliwy dzień!

Fer Martin
źródło
Klucze obiektów w JS mogą być niecytowane, o ile są poprawnymi składniowo identyfikatorami. field1i field2są prawidłowymi identyfikatorami. field1.foonie jest na przykład.
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"
   ..
   ..

  }
}

Przetestowałem na przykładowych danych, że działa idealnie zgodnie z oczekiwaniami.

Rajeev Rathor
źródło
Nie chcemy tego w przypadku powłoki mangusty, chcemy tego ze schematem node js
Rohit Nishad