2012-10-22 28 views
8

Potrzebuję utworzyć kilka skryptów wdrażania, takich jak migracja danych i urządzenia dla bazy danych MongoDB, i nie mogłem znaleźć wystarczających informacji o tym, jak upuszczać indeksy za pomocą interfejsu API Mongoose. Jest to dość prosta przy użyciu oficjalnego API MongoDB:Jaki jest zalecany sposób upuszczania indeksów za pomocą Mongoose?

Aby usunąć wszystkie indeksy na określonej kolekcji:

db.collection.dropIndexes();

Jednak chciałbym skorzystać Mongoose za to i próbował użyć executeDbCommand adaptacją this post, ale bez powodzenia:

mongoose.connection.db.executeDbCommand({ dropIndexes: collectionName, index: '*' }, 
    function(err, result) { /* ... */ }); 

powinienem użyć offic ial MongoDB API for Node.js czy po prostu coś mi w tym nie pasowało?

+0

Czy wystąpił błąd podczas uruchamiania kodu executeDbCommand? Twoja składnia wygląda trochę, jeśli uruchomisz executeDbCommand ({dropIndexes: nazwa kolekcji, indeks: '*'}, funkcja (err, result) {...}); ? Wierzę, że poprawna składnia to pełne polecenie zamknięte w nawiasy klamrowe, a następnie funkcja. – Louisa

Odpowiedz

20

Aby to zrobić za pośrednictwem modelu Mongoose dla kolekcji można nazwać dropAllIndexes rodzimej kolekcji:

MyModel.collection.dropAllIndexes(function (err, results) { 
    // Handle errors 
}); 

aktualizacji

dropAllIndexes jest przestarzałe w wersji 2.x Natywny sterownik, a więc dropIndexes powinien być użyty zamiast:

MyModel.collection.dropIndexes(function (err, results) { 
    // Handle errors 
}); 
1

Wygląda na to, że próbujesz upuścić wszystkie indeksy z danej kolekcji.

Zgodnie z dokumentami MongoDB, this is the correct command.

... Próbowałem użyć executeDbCommand zaadaptowany z tego postu, ale bez powodzenia:

Aby naprawdę pomóc tutaj, musimy Więcej szczegółów:

  • Co nieudane? Jak zmierzyłeś "brak sukcesu"?
  • Czy możesz potwierdzić w 100%, że polecenie zostało uruchomione? Czy wypisujesz dane do logów w wywołaniu zwrotnym? Czy sprawdziłeś zmienną err?
  • Gdzie tworzysz indeksy? Czy możesz potwierdzić, że nie tworzysz ich ponownie po upuszczeniu?
  • Czy wypróbowałeś polecenie podczas wyświetlania nazw indeksów? Szczerze mówiąc, nie powinieneś używać "*". Powinieneś usuwać i tworzyć bardzo konkretne indeksy.
+0

"Bez powodzenia" mam na myśli to, że kod wykonano bez błędów, ale wywołanie zwrotne dostarczone przeze mnie nigdy nie zostało wywołane. Mam ten problem w małym skrypcie, którego jedynym obowiązkiem jest upuszczenie i utworzenie pewnych kolekcji, w tym powiązanych indeksów i wypełnienie tych kolekcji pewnymi danymi potrzebnymi do testowania. – npclaudiu

Powiązane problemy