2016-01-28 15 views
8

Mamy aplikację nodejs + mongodb, która działa od kilku lat i jest rozwijana na wielu maszynach. Na maszynie tylko jedna dewelopera, widzę błądMongoDB Defaulting to Strict Mode

MongoError: collection already exists 

bada ten błąd wskazuje, że nastąpi to podczas próby utworzenia istniejącą kolekcję tylko wtedy, gdy zbiór jest w trybie ścisłym. Nie wzywamy trybu ścisłego mongo w naszej aplikacji i możemy odtworzyć ten błąd tylko na jednej maszynie.

kod, który powoduje ten błąd jest następujący:

var mongo = require('mongodb'); 
mongo.MongoClient.connect(config.mongoConnectionString, {w:1}, function(err, db) { 
    db.createCollection('accounts', function(err, collection) { 
    // "err" here is the error message. 
    }); 
}); 

Czy istnieje sposób aby przesłonić Mongo w domyślnej wartości strict: false? Czy istnieje globalna opcja konfiguracji, która powoduje włączenie trybu ścisłego? Wolałbym nie modyfikować kodu, aby określić dla każdej kolekcji tylko strict: false tylko dla jednego dewelopera. Deweloper pracuje Mongo v3.2 tryb

+0

redakcją powyżej. Jak już wspomniałem, ten kod działa w środowiskach testowych i produkcyjnych przez dwa lata, a wielu programistów jest w stanie uruchomić ten kod. Wydaje się, że tylko jeden komputer ma ten problem. Jeśli ręcznie pomijamy błędy dla tej kolekcji, widzimy ten sam błąd dla wszystkich innych kolekcji na tym komputerze, co prowadzi mnie do przekonania, że ​​istnieje wartość konfiguracyjna dla zainstalowanej wersji samego mongo, a nie problem z naszym kodem. – aaaarrgh

+0

Czy ten programista również zainstalował mangustę? – Jaco

+0

@JohnnyHK Stara wersja. 1.2.14 – aaaarrgh

Odpowiedz

1

Możesz wyłączyć „ścisłe” za pomocą tego

var mongo = require('mongodb'); 
mongo.MongoClient.connect(config.mongoConnectionString, {w:1}, function(err, db) { 
    db.createCollection('accounts', {strict:false}, function(err, collection) { 
    // "err" here is the error message. 
    }); 
}); 

można przeczytać więcej na ten temat z here

+0

Ja już odkryłem to, nie chcę zmieniać stabilnego kodu, który jest uruchamiany w procesie produkcyjnym, w celu rozwiązania problemu występującego tylko na komputerze jednego dewelopera. To pytanie dotyczy znalezienia konfiguracji, która powoduje błędne zachowanie na jednej maszynie, zamiast zakłócanie wszystkich innych konfiguracji roboczych – aaaarrgh