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?

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});

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ń!


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.


Nie chcemy tego w przypadku powłoki mangusty, chcemy tego ze schematem node js
Rohit Nishad
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.