首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在mongodb cursor.each中处理long操作?

如何在mongodb cursor.each中处理long操作?
EN

Stack Overflow用户
提问于 2016-11-23 10:47:00
回答 1查看 19关注 0票数 0

我有一个.each()循环和在每个循环中更新的全局变量。在每个循环中都有一个collection.find,node.js不等待搜索完成,甚至在find得到第一个结果之前就转到下一个元素,这是有问题的。我不认为让它等待是正确的事情,我想以“节点方式”来处理它(告诉我我是否应该这样做)

以下是我的代码的简化版本:

(它会找到恰好是50岁的所有客户,并在他们所在的城市对商店做一些事情)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var clients = db.collection('clients');
var current;
var clientnumber=0;

clients.find({"age":50},function(err,results){
    results.each(function(err,client){
        if(client){
            clientnumber++;
            var city = client.city;
            shops.find({"_id":city},function(err,resCursor){
                resCursor.toArray(function(err,bson){
                    //does stuff using the city, client number variables and data from "shop"
                    //including another find and each operation
                });
            });
            clientnumber++;
        }
    }
});

(clientnumber不是一个id,它只计算有多少50岁的客户)

当我运行这段代码时,each循环对于find来说太快了,所以像clientnumbercity这样的变量在调用find回调时并不是最新的。我应该在这里做什么?

我在考虑为城市创建一个数组,比如cities[clientnumber]=city,但我不知道如何跟踪clientnumer。我想在本地传递变量,比如var currentcity=city;,但我不能确定在转到下一个客户端之前会不会这样做,我不想为每个嵌套都这样做。

如何跟踪我的全局变量?您可以对结构进行注释,但它非常简单,因此可能不适用。

EN

回答 1

Stack Overflow用户

发布于 2016-11-23 11:00:03

按顺序遍历客户端。在开始下一步之前,等待每一步的结束。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clients.find({"age":50},function(err,results){
    doclient(clientnumber, 0, results.length, results, function(result){
        // alldone, clientnumber in result
     })
})


function doclient(clientnumber, done, todo, results, callback)
{
    if(done >= todo)
    {
        return callback(clientnumber);
    }
    else
    {
        var client = results[done];
        if(client){
            clientnumber++;
            var city = client.city;
            shops.find({"_id":city},function(err,resCursor){
                resCursor.toArray(function(err,bson){
                    //does stuff using the city, client number variables and data from "shop"
                    //including another find and each operation

                    // call next client
                    setImmediate(doclient, clientnumber, ++done, todo, results, callback);
                });
            });
        }
        else
        {
            // call next client
            setImmediate(doclient, clientnumber, ++done, todo, results, callback);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40762278

复制
相关文章
【16】万恶的引导设计:配表篇
上一篇,我们了解了引导的一些理论知识,包括分段、分步的概念,强引导与弱引导,引导的触发、类别、操作、保存点等,本篇笔者将结合这些理论来聊聊引导的配表。
代码咖啡
2019/10/08
1K0
压测grafana面板之请求响应耗时解析
在某次压测护航中,有同学提问,为什么被压测服务后台日志查看到的大部分请求耗时都比95分位平均响应时间小?是不是数据统计的有问题?
cailynyu
2022/02/14
2.9K1
一个MySQL建表需求的讨论和引导
昨天收到一个业务同学的需求邮件,一般有些复杂的需求业务同学会发邮件告知我们,需要我们评估之后再做交付,我看了邮件之后,发现这个需求好像有点别扭,大体的意思是在中间件的环境中创建一张表,表结构如下:
jeanron100
2021/03/16
2.8K0
Bootstrap响应式前端框架笔记十五——面板与井
    Bootstrap中的面板由pannel相关类来创建,一个完整的面板分为面板头部、面板体和面板注脚,并且Bootstrap中默认定义了一些面板风格,示例如下:
珲少
2018/08/15
8000
Bootstrap响应式前端框架笔记十五——面板与井
【嘘】内有惊喜,请勿扩散
▼扫码加入DNSPod官方用户群▼ 第一时间追踪活动最新动态 SMB 腾讯云中小企业产品中心     腾讯云中小企业产品中心(简称SMB),作为腾讯云体系中唯一专业服务于8000万中小企业的业务线,致力于为中小微企业提供全面完善贴心的数字化解决方案。产品线覆盖了企业客户从创业起步期、规范治理期、规模化增长期、战略升级期等全生命周期,针对性的解决企业的信息化、数字化、智能化的生产力升级需求。本中心还拥有两大独立腾讯子品牌:DNSPod与Discuz!,在过去15年间,为超过500万企业级客户提供了强大、优质
腾讯云DNSPod团队
2022/01/21
2610
苦逼的程序员(内有惊喜)
很多人拿程序员来开涮,比如: 从前,有一个程序员,他临死的时候, 不小心得到了一盏神灯 。然后他向神灯许愿, 希望在有生之年能写一个好项目。 后来,后来他得到了永生。 再比如: 程序员职业服装! 还
用户1631416
2018/04/12
6030
苦逼的程序员(内有惊喜)
动手练一练,做一个响应式的后台管理面板
作为一名前端开发者,我们或多或少都会接触后台管理系统的制作,你是否会亲自纯手工制作做还是从网上找源码改一个呢?今天我们将从零开始纯手工制作一个后台管理面板的首页,通过这个案例你将会学习到如何制作一个响
前端达人
2020/03/16
1.3K0
动手练一练,做一个响应式的后台管理面板
千万级数据表选错索引导致的线上慢查询事故
又和大家见面了!又两周过去了,我的云笔记里又多了几篇写了一半的文章草稿。有的是因为质量没有达到预期还准备再加点内容,有的则完全是一个灵感而已,内容完全木有。羡慕很多大佬们,一周能产出五六篇文章,给我两个肝我都不够。好了,不多说废话了...
Rude3Knife的公众号
2020/08/02
1.4K0
国内有哪些好的刷题网站?
CoderAfterWork靠写代码挣钱去浪... 刷题也就这么点地方 1、Leetcode 鼎鼎大名的Leetcode,据不完全统计在上面被刷过的题可以围绕地球三圈。(没说赤道哈,就是这么严谨。)总之,很多国内外的码农在上面刷题。难度从easy到hard都有,而且覆盖面极广。现在还增加了数据库和shell,相匹配的论坛也可以多看看。很锻炼和国外码农沟通的能力,对于以后去混Github也有好处。 特点:各种语言支持很广泛,题型覆盖很广,测试数据集较弱。 2、Codility 同样一家著名的国外刷题网站。和L
前朝楚水
2018/04/04
3.4K0
Grafana 统计面板与文本面板的使用
统计面板可以用于显示一个大的统计值和一个可选的背景颜色,我们可以使用阈值来控制背景或颜色值,效果如下所示:
我是阳明
2021/11/23
2.6K0
MongoDB 路由表刷新导致响应慢场景解读
MongoDB sharding 实例从3.4版本升级到 4.0版本 以后插入性能明显降低,观察日志发现大量的 insert 请求慢日志:
MongoDB中文社区
2020/11/11
2K0
MongoDB 路由表刷新导致响应慢场景解读
2018,新年快乐 | 内有福利
长按二维码关注 “腾讯乐享” 随机送出20个QQ公仔 福利
腾讯乐享
2019/03/12
1.3K0
2018,新年快乐 | 内有福利
面板环境的安装
安装完成在浏览上打开面板的地址,登入面板,面板会自动推荐你安装环境套件,这里有两种选择,第一种是LNMP套件,第二种是LAMP套件:
霹格软件
2018/09/11
6540
面板环境的安装
cPanel面板和宝塔面板区别
  cPanel面板和宝塔面板有什么区别?cPanel面板和宝塔面板都是一种目前比较常用的服务器管理面板,那么,cPanel面板和宝塔面板哪个好呢?让我们一起来详细了解一下cPanel面板和宝塔面板吧
会长君
2023/04/26
4.2K0
清除linux系统的多余引导
由于我把系统给升级(update)了,在grub引导模式出现新旧版本(Grub与Grub2)的引导系统分别为正常启动和进入恢复模式各2个引导项,如下图显示:百度找不到相关或类似的教程,只好半夜起来研究,现在做好了并写下笔记。
用户1685462
2021/07/23
6.3K0
利用threshold实现的遮罩引导
点击“开始引导”,则进入引导操作。除指定的按钮可以操作外,其它区域均不可点击。这种应用当新功能或是新产品上线后,用来引导用户来使用产品/功能,是十分有用的。facebook也有类似的引导,方法也很简单:用4个绝对定位的DIV(指定一个背景 + 一定透明度)遮住其它部分,这样可以被操作的区域就“留空”出来。
meteoric
2018/11/16
6160
Netty中的引导类Bootstrap
Bootstrap是用来组织Netty的各个结构(pipeline,handler,eventloop),并使他们运行起来的类结构。分成两块,一个是客户端引导类Bootstrap,只用1个channel来处理所有的网络交互,另一个是服务端的ServerBootstrap,它提供一个父channel来接受客户端的请求,然后父channel创建多个子channel来用于的通信
爬蜥
2019/07/09
9560
旁观者.个性引导页个性引导页
这款个人主页简约而不失优雅,背景图片为随机api,共有38张随机图片,每次刷新都会看到不一样的美图。
小化先森
2023/03/05
1.1K0
点击加载更多

相似问题

这个单元测试是否与实现紧密耦合?

30

逻辑与数据紧密耦合的单元测试系统

40

不耦合到实现细节的单元测试行为

20

共享数据库与紧耦合消息模型

10

如何将此耦合应用程序解耦?

40
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文