2012-10-22 25 views
8

Bir MongoDB veritabanı için veri taşıma ve demirbaşlar gibi çeşitli dağıtım komut dosyaları oluşturmak gerekiyor ve Gelincik API kullanarak dizinler bırakın konusunda yeterince bilgi bulamadık.Mongoose kullanarak indeksleri düşürmenin önerilen yolu nedir?

belirtilen koleksiyon tüm dizinleri silmek için:: Resmi MongoDB API kullanılırken bu oldukça düz ileri

db.collection.dropIndexes(); Ancak

, bu ve ben için Mongoose kullanmak istiyorum executeDbCommandthis post uyarlanan kullanmaya çalıştı, ancak başarılı:

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

Ben Offic kullanmalı mıyım Node.js için ial MongoDB API'sı veya bu yaklaşımda bir şeyleri kaçırdım mı? Belirli bir koleksiyonu indeksler tüm damla çalışıyorsanız gibi

+0

executeDbCommand kodunuzu çalıştırırken bir hata oluştu mu? Sözdiziminiz biraz kapalı görünüyor, ne yaparsanız executeDbCommand ({dropIndexes: collectionName, index: '*'}, function (err, sonuç) {...}); ? Doğru sözdiziminin, tam komutun küme parantezine eklenmesi ve ardından da işlevin olması gerektiğine inanıyorum. – Louisa

cevap

20

koleksiyonu için Gelincik modelinde aracılığıyla Bunu yapmak için, yerel toplama dropAllIndexes çağırabilir yerel sürücü, bu nedenle dropIndexes yerine kullanılmalıdır:

1

görünüyor. MongoDB Dokümanlar, this is the correct command göre

.

... Bu görevinden executeDbCommand adapte kullanmaya çalıştı, ancak başarılı:

, daha fazla ayrıntıya gerek gerçekten burada yardımcı olmak için:

  • ne başarısız? "Başarı yok" u nasıl ölçtün?
  • Eğer% 100 komut koştu teyit edebilir? Geri aramadaki günlüklere çıktı mıydınız? err değişkenini kontrol ettiniz mi?
  • Nereye dizinleri oluşturuyorsunuz? Düştükten sonra onları yeniden oluşturmadığınızı onaylayabilir misiniz?
  • spesifik endeks adlarını listeleyen yaparken komutunu denediniz mi? Dürüst olmak gerekirse, "*" kullanmamalısınız. Silmek ve çok özel dizinler oluşturmalısınız. 2.x sürümünde kullanımdan kaldırılmıştır

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

    Güncelleme

    dropAllIndexes:

+0

"Başarı yok" demek, kodun hatasız yürütüldüğü anlamına geliyor, fakat benim tarafımdan sağlanan geri arama hiçbir zaman çağrılmadı. Bu problemi, tek sorumlusu, ilgili dizinleri de dahil olmak üzere, belirli koleksiyonları bırakmak ve oluşturmak olan ve bu koleksiyonları test için gerekli bazı verilerle dolduran küçük bir senaryoya sahibim. – npclaudiu

İlgili konular