Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 查找文档、执行一些业务逻辑并使用mongoose删除_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 查找文档、执行一些业务逻辑并使用mongoose删除

Node.js 查找文档、执行一些业务逻辑并使用mongoose删除,node.js,mongodb,mongoose,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++){ //

我想知道下面的代码是否可以工作,如果不能,请任何人提供一个替代方案

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) ...
                });
            }
        }
    });
db.model('orders').find({creationDate:{$lt:today}},{status:“Active”}).exec(函数(err,orders){
如果(错误)。。。
如果(订单){
对于(变量i=0;i
我的目标是基于
creationDate
状态
查询一些文档,然后基于这些文档执行一些业务逻辑。完成业务逻辑后,我想编辑这些文档并将它们保存到数据库中


感谢您的帮助。

一个更简单、更直观的方法是使用图书馆。当您需要运行多个相互依赖的任务时,请使用方法,当这些任务都完成时,请执行其他操作

考虑以下示例:

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

优雅的解决方案,但我没有那么多的业务逻辑来做这里,它的任务非常简单。顺便提一下我已将我的要求从想要删除
订单
对象更改为仅将其
状态
字段更新为
已删除
@TBE我已更新了答案,尽管在这里这被认为是一种不好的做法,所以像您那样更改要求,因为这对其他出现并看到这一点的用户非常具有误导性提供的答案与您的要求不符。尽管如此,不管您需要在一个任务中执行多少业务逻辑,这里的概念是使用异步库以更优雅和可读的方式处理嵌套的异步回调,如上面的答案所示。我相应地更新了我的问题。谢谢你的回答。你能解释一下
callback()
的作用吗?它是从mongoose的
回调
函数内部调用的,在这些回调的作用中有最好的解释,但基本上所有异步函数都以一组任务作为参数来执行。每个任务都有一个回调函数,该函数必须在任务完成时调用,例如在对数据库的异步调用完成后调用。异步函数还将回调函数作为参数,让我们将其称为最终回调。当所有任务都完成时,即调用各自的任务回调函数,调用最终回调。