Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
Angularjs NodeJS异步大数据集回调_Angularjs_Node.js_Mongodb_Async.js - Fatal编程技术网

Angularjs NodeJS异步大数据集回调

Angularjs NodeJS异步大数据集回调,angularjs,node.js,mongodb,async.js,Angularjs,Node.js,Mongodb,Async.js,我在NodeJS中处理大型数据集时遇到问题。我使用async是因为我想在一切都完成后调用res.send 原因: 在该项目的MongoDB集合中,可以添加活动。商店可以加入这些活动,并将活动中的一些活动添加到他们的议程中。(如在Facebook上发布消息,将照片上传至Instagram) 在网站的前端,有一个显示所有活动的页面。当一个活动开始时,必须有一个包含所有参与此活动的商店的列表 因为每个商店都有一个议程,在哪里保存任务,我必须遍历所有商店,看看是否有一个活动ID等于活动中打开的ID的操作

我在NodeJS中处理大型数据集时遇到问题。我使用async是因为我想在一切都完成后调用
res.send

原因: 在该项目的MongoDB集合中,可以添加活动。商店可以加入这些活动,并将活动中的一些活动添加到他们的议程中。(如在Facebook上发布消息,将照片上传至Instagram) 在网站的前端,有一个显示所有活动的页面。当一个活动开始时,必须有一个包含所有参与此活动的商店的列表

因为每个商店都有一个议程,在哪里保存任务,我必须遍历所有商店,看看是否有一个活动ID等于活动中打开的ID的操作。 商店集合中有3500多个条目,因此处理每个商店可能需要一段时间,因此我决定在加载页面时使用angular发布该请求

问题: 正如您在下面的代码中所看到的,我得到了所有的商店,并循环浏览了这些商品。然后,我循环浏览议程项目,查看是否有匹配的活动ID,然后在数组中添加一些我想要发送回的信息。但代码在1商店后停止。如何添加阵列中的所有店铺,并在处理所有店铺时发送所有店铺

商店模式: (并非所有字段)

控制器中的代码:
问题是
shopplete
回调仅在
agenda.campaignId==campaignId
为True时调用。
如果block

问题是
shopComplete
回调,则需要在
agenda.campaidId==campaidId
为True时调用它。
您需要在
if block

之外调用它。您是否尝试编写一个请求,返回议程中>1个元素的campaingnId等于您想要的内容的仅店铺?MongoDB可以大大减少您的时间您是否尝试编写一个只返回Shop的请求,其中议程中>1个元素的campaingnId等于您想要的?MongoDB可以减少你的时间,还建议NVO运行同步循环而不是
async.eachSeries(shop.agenda,function(agenda,shopComplete){
,因为我看不出你为什么需要异步。还建议NVO运行同步循环而不是
async.eachSeries(shop.agenda,function(agenda,shopComplete)){
因为我不明白为什么需要异步。
var Shop = new Schema({
    name:String,
    email:String,
    phone: String,
    agenda:[{
        campaignId:Schema.ObjectId,
        taskId:Schema.ObjectId,
        campaignName: String,
        downloaded: Boolean,
        success: Boolean,
        startDate:Date,
        endDate:Date,
        description:String,
        kind:String
    }],
},{collection:'shop'});
module.exports.getCampaignShop = function(req,res){
    console.log("getCampaignShop");
    var campaignId = req.query['campaignId'];
    console.log("campaignId", campaignId);
    var result = [];
    Shop.find().sort({name:1}).exec(function(err, shops){
        console.log("shop count", shops.length);
        async.eachSeries(shops, function(shop, allDone){
            async.eachSeries(shop.agenda, function(agenda, shopComplete){
                if(agenda.campaignId == campaignId){
                    var shopResult = {
                        shopId: shop._id,
                        nameSlug: shop.nameSlug,
                        logo: shop.logo,
                        name: shop.name
                    }
                    console.log("shopResult", shopResult);
                    result.push(shopResult);
                    shopComplete();
                }
            })
            allDone();
        }, function(err){
            if (err) throw err;
            console.log("result length", result.length);
            res.send(result);
        })

    })
}