2016-05-08 59 views
0

我有以下代碼從db(mongo)中獲取一些數據。保存更新的模型到mongodb

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

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

然後我修改這些模型中的每一個。根據用戶的類型,我將某些字段添加到模型中。 (這工作正常)。

function buildUsers(users){ 
    // my code iterates over users and adds 
    // properties as required. 
    // Working fine. 
    return users; // updated users. 
} 

現在我想將這些更新的模型保存回mongo,這是它讓我拉我的頭髮的地方。

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

最後我把這些功能,如:

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

一切正常,直到我打電話UserSchema.save。可能是什麼問題呢?

PS:我正在使用mongoose

TIA。

回答

1

UserSchema.save接受單個實例,您必須遍歷用戶並保存每個實例。貓鼬沒有實施批量插入(參見issue #723)。

下面是使用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

感謝隊友簡單的實現。將調查它並讓你知道。 :) – AdityaParab

+0

謝謝!有效。雖然,我不得不使用'async.forEachOf'而不是'async.eachSeries'。再次感謝。 :) – AdityaParab

相關問題