查找文档,执行一些业务逻辑并使用mongoose删除

时间:2016-02-10 13:50:54

标签: node.js mongodb mongoose

我想知道下面的代码是否有用,如果没有,有人可以提供替代方案吗?

db.model('orders').find({creationDate: {$lt:today}}, {status: "Active"}).exec(function(err,orders){
        if(err) ...
        if(orders){
            for(var i = 0 ; i < orders.length ; i++){
                //  some business logic here....
                orders[i].remove(function(err){
                    if(err) ...
                });
            }
        }
    });

我的目标是根据creationDatestatus查询一些文档,然后根据这些文档执行一些业务逻辑。完成业务逻辑后,我想编辑这些文档并将其保存到数据库中。

感谢帮助者。

1 个答案:

答案 0 :(得分:1)

更简单直观的方法是使用 async 库。当您需要运行多个彼此依赖的任务以及何时完成其他任务时,请使用 async.series() 方法。

考虑以下示例:

// Define query document out here, so both tasks can access it
var query = {"creationDate": {"$lt": today}}, {"status": "Active"};     
async.series([
    // Load orders that satisfy the above query to do the business logic first
    function(callback) {
        db.model('orders').find(query).exec(function(err, orders) {
            if (err) return callback(err); 
            // Do the business logic here
            ....

            callback();
        });
    },

    // Update orders (won't be called before task 1's "task callback" has been called)
    function(callback) {
        db.model('orders').update(
            query, 
            {"$set": {"status": "Deleted"}},
            {"multi": true}
        ).exec(function(err, results) {
            if (err) return callback(err);              
            callback();
        });
    }
], function(err) { 
    // This function gets called after the two tasks have called their "task callbacks"
    if (err) return next(err);
    // Do something else after the two tasks have been called
});