Javascript 如何在nodejs中优化mongodb查询?

Javascript 如何在nodejs中优化mongodb查询?,javascript,node.js,mongodb,asynchronous,async-await,Javascript,Node.js,Mongodb,Asynchronous,Async Await,我有一个在nodejs中运行的代码,在其中我必须调用MongoDB查询,该查询具有一些聚合属性,我使用回调调用了它,但主要问题是它没有像我预期的那样工作。就像我想异步运行代码,但它不能像这样工作,我希望一旦MongoDB查询完成,然后调用我的另一个函数,但目前在代码执行之间调用了我的另一个函数,我对这种方法感到非常不安,我需要帮助,请给出解决方案。 这是代码 function (done) { var count = 0; Wine

我有一个在nodejs中运行的代码,在其中我必须调用MongoDB查询,该查询具有一些聚合属性,我使用回调调用了它,但主要问题是它没有像我预期的那样工作。就像我想异步运行代码,但它不能像这样工作,我希望一旦MongoDB查询完成,然后调用我的另一个函数,但目前在代码执行之间调用了我的另一个函数,我对这种方法感到非常不安,我需要帮助,请给出解决方案。 这是代码

        function (done) {
            var count = 0;
            Wine.distinct("_id", {}).exec(function(err,winesList){
                for(var x=0;x < 100;x++){
                    var currentWineId = winesList[x].toString();
                    //wineId should not be object
                    WTHelper.calculateAvgWinePriceAndUpdate(currentWineId, todayDate,'true', function (err, result) {
                        count++;
                        console.log("statusReport.totalCount :", count);
                    })
                } done(null, count);
            })
        }, function (count) {
            console.log("prateek totalCount :", count);
        }
    ])
检查输出

statusReport.totalCount : 98
calculateAvgWinePriceAndUpdate: Price Updated for Purchase Date Sat Sep 12 2020
statusReport.totalCount : 99
calculateAvgWinePriceAndUpdate: Price Updated for Purchase Date Sat Sep 12 2020
statusReport.totalCount : 100
calculateAvgWinePriceAndUpdate: Price Updated for Purchase Date Sat Sep 12 2020

如果您的查询与您使用的promise无关,则底部缺少第二个函数

。所有这些函数将并行执行您的查询

或者它们是相互关联的,或者您希望一个接一个地执行,那么您可以使用 async Wait方法将以异步方式同步执行db调用。

根据的文档,您应该使用exec方法传递回调函数。
statusReport.totalCount : 98
calculateAvgWinePriceAndUpdate: Price Updated for Purchase Date Sat Sep 12 2020
statusReport.totalCount : 99
calculateAvgWinePriceAndUpdate: Price Updated for Purchase Date Sat Sep 12 2020
statusReport.totalCount : 100
calculateAvgWinePriceAndUpdate: Price Updated for Purchase Date Sat Sep 12 2020