2016-05-08 7 views
0

Ich habe folgenden Code, um einige Daten von der db (Mongo) zu holen.speichern Sie aktualisierte Modelle zu mongodb

function getAllUsers(){ 
    var UsersPromise = Q.defer(); 

    UserSchema.find({}, function(err, data){ 
     if(err){ 
      UsersPromise .reject(err); 
     }else { 
      UsersPromise .resolve(data); 
     } 
    }); 
    return UsersPromise .promise; 
} 

Dann modifiziere ich jedes dieser Modelle. Je nach Benutzertyp füge ich dem Modell bestimmte Felder hinzu. (Dies funktioniert ordnungsgemäß).

Jetzt möchte ich diese aktualisierten Modelle zurück zu Mongo speichern und das ist, wo es mich zieht, meine Haare zu ziehen.

function saveUsers(users){ 
    // here, the users are received correctly. But the following line to save the users fails. 
    var SaveUsersPromise = Q.defer(); 
    UserSchema.save(users, function(err, data){ 
     if(err){ 
      SaveUsersPromise .reject(err); 
     } else { 
      SaveUsersPromise .resolve(data); 
     } 
    }); 
    return SaveUsersPromise .promise; 
} 

Schließlich nenne ich diese Funktionen wie:

DB.connect() 
.then(getAllUsers) 
.then(buildUsers) 
.then(saveUsers) 
.catch(errorHandler); 

Alles funktioniert einwandfrei, bis ich UserSchema.save nennen. Was könnte das Problem sein?

PS: Ich verwende mongoose.

TIA.

Antwort

1

UserSchema.save akzeptiert einzelne Instanz, Sie müssen Benutzer durchlaufen und speichern jeweils. Mongoose hat noch keine Masseneinsätze implementiert (siehe issue #723).

Hier ist eine einfache Implementierung async.eachSeries

function saveUsers(users){ 
    var async = require('async'); // <== npm install async --save 
    var SaveUsersPromise = Q.defer(); 
    async.eachSeries(users, function(user, done){ 
     UserSchema.save(user, done); 
     // or 
     user.save(done); // if user is Mongoose-document object 
    }, function(err){ 
     if(err){ 
      SaveUsersPromise.reject(err); 
     } else { 
      SaveUsersPromise.resolve(); 
     } 
    }); 
    return SaveUsersPromise.promise; 
} 
+0

Dank Kumpel mit. Will hineinschauen und dich wissen lassen. :) – AdityaParab

+0

Danke! Es funktionierte. Allerdings musste ich 'async.forEachOf' anstelle von' async.eachSeries' verwenden. Danke noch einmal. :) – AdityaParab

Verwandte Themen