【问题标题】:save updated models to mongodb将更新的模型保存到 mongodb
【发布时间】:2016-09-03 02:43:08
【问题描述】:

我有以下代码从 db (mongo) 中获取一些数据。

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。

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    UserSchema.save 接受单个实例,您必须遍历用户并保存每个实例。 Mongoose 尚未实现批量插入(请参阅 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;
    }
    

    【讨论】:

    • 谢谢伙计。会调查它并让你知道。 :)
    • 谢谢!有效。虽然,我不得不使用async.forEachOf 而不是async.eachSeries。再次感谢。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多