Mongo的Cursor.nextObject有时会错误返回Null?

2023-12-01

我正在结合async.queue and Cursor.nextObject迭代游标并对返回的文档执行一些异步工作。

有一个很棒的小包已经可以做到这一点,https://www.npmjs.org/package/mongo-cursor-processing,但不幸的是它没有公开我需要的底层队列。

因此,我尝试自己实现它,但遇到了障碍。有时,Cursor.nextObject回报null事实上还有更多文档。

这是我附加到队列中以进行说明的一小段代码片段:

if (this.cursor && this.length() < this.concurrency) {
    this.cursor.nextObject(function(err, item) {
        console.log(this.name + ': ' + (item ? item._id : '<null>') + ' ' + (err ? err : '<null>'));
        if (item) {
            this.push(item);
        } else {
            // delete this.cursor;
        }
    }.bind(this));
}

控制台日志显示:

... Maybe 100 lines ...
prop-queue: 511abbd59c0d972a3e000119 <none>
prop-queue: 511abbd59c0d972a3e00011d <none>
prop-queue: 511abbd59c0d972a3e000120 <none>
prop-queue: 511abbd59c0d972a3e000122 <none>
prop-queue: <none> <none>
prop-queue: 511abbd59c0d972a3e000125 <none>
prop-queue: 511abbd59c0d972a3e000127 <none>
prop-queue: 511abbd59c0d972a3e000129 <none>
prop-queue: 511abbd59c0d972a3e00012c <none>
... 1000's more lines before the next null ...

有时,<none> <none>在下一次调用成功之前,该行会重复两次。

真正有趣的部分是当我在 Mongo shell 中执行查询时,之间有一个暂停511abbd59c0d972a3e000122 and 511abbd59c0d972a3e000125打印到控制台。暂停持续约 0.75 秒,正好在光标命中空文档的位置。我已经在查询中迭代了数千个文档,这是我经历的唯一暂停。此外,检查零点两侧的两份文件并没有发现任何特殊之处。

有什么想法可能导致这两种可能相关的现象吗?


我仍然不确定是什么导致了暂停,但这似乎是罪魁祸首。

暂停期间,Cursor.nextObject在第一次返回之前被多次调用。其中一些电话正在返回null。解决方案是确保Cursor.nextObject永远不会被同时调用。

if (this.cursor && !this.cursor_exec && this.length() < this.concurrency) {
    this.cursor_exec = true;
    this.cursor.nextObject(function(err, item) {
        console.log(this.name + ': ' + (item ? item._id : null) + ' ' + (err ? err : null));
        this.cursor_exec = false;
        if (item) {
            this.push(item);
        } else {
            delete this.cursor;
        }
    }.bind(this));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mongo的Cursor.nextObject有时会错误返回Null? 的相关文章

  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • 如何获取从 Express (Node.js) 中的表单传递的数据

    我想获取使用表单从页面传递的数据 并在重定向的页面中使用该数据 我的客户端有这个表格
  • 使用 Node.js 访问用 C++ 编写的 SDK

    我有一个用 C 语言编写的 SDK 可以与我的扫描仪设备进行通信 我需要开发一个可以访问扫描仪设备的电子应用程序 我知道有很多库可用于扫描仪 但我想使用这个 SDK 因为它允许我访问设备的完整功能 而且它是由设备制造商提供的 那么 有没有什
  • MongoDB 存储过程等效项

    我有一个包含商店列表的大型 CSV 文件 其中一个字段是邮政编码 我有一个名为 ZipCodes 的独立 MongoDB 数据库 它存储任何给定邮政编码的纬度和经度 在 SQL Server 中 我将执行一个名为 InsertStore 的
  • Node.js 中的 webRTC

    我想在node js 中使用webRTC 来管理涉及浏览器和nodejs 上的对等点的混合连接 我做了一些测试和搜索 我尝试使用wrtc https github com js platform node webrtc or webrtc
  • MongoDB Java 嵌套文档无法使用键名中的点进行访问

    当在Java中使用MongoDB API时 我试图检索以下值two在如下所示的文档中 data id 1234 one two three 我正在运行这个 MongoCollection
  • 如何在nodejs中使用crypto.randomBytes使用async/await?

    const crypto require crypto async function getKey byteSize let key await crypto randomBytes byteSize return key async fu
  • Excel Add In - console.log 在哪里输出它的消息 - NodeJS

    我正在尝试使用 JavaScript API 创建 Excel 插件 但我不明白 console log 在哪里输出它们的消息 所有 Microsoft 文档都包含 console log 示例 但没有解释 console log 输出消息
  • 如何执行密集的 Node.js 计算

    我正在开发一个电子商务应用程序 每次产品从服务器发送到客户端时都必须重新计算产品的定价 每次发送多达数千个产品 计算部分本身相当密集 因为它需要多个数据库查询来计算 我的简单解决方案是将计算部分抽象到另一个专门用于计算的 Node js 应
  • MongoDB 嵌套数组查询

    我问这个作为评论another https stackoverflow com questions 5250652 query a nested array in mongodb问题 还发了一个question https groups g
  • 如何在浏览器同步中配置端口

    我有一个gulp任务运行于browser sync 默认情况下它运行在node js服务器的端口3000上 我想将默认端口更改为任何其他端口 例如3010 var gulp require gulp connect require gulp
  • Angular 和 Node JS 中的路由问题 [Angular]

    我有角度js的问题 我创建了 login html 和 home html 成功登录后我想将页面更改为 home html 我的路由不起作用 默认 url 是 localhost angular 我尝试路由 realpath 即 local
  • react-native-screens:compileDebugKotlin 错误

    失败 构建失败并出现异常 什么地方出了错 任务 react native screens compileDebugKotlin 执行失败 评估任务 react native screens compileDebugKotlin 的属性 fi
  • Azure Functions [JavaScript / Node.js] - HTTP 调用,良好实践

    从我的 Azure 函数 在 Node js 中运行 由 EventHub 消息触发 中 我想向某个外部页面发出发布请求 就像是 module exports function context eventHubMessages var ht
  • NPM:切勿为 npm 包安装嵌套的可选依赖项

    我正在编写一个包 A 我想将其发布到 NPM A 依赖于包 B 而包 B 又依赖于包 C 然后 C 有两个可选的本机依赖项 D 和 E 我明确知道我没有使用可选依赖项 D 和 E 并且永远不想当有人安装我的软件包时尝试安装它们 我知道你可以
  • Node.js 进行 rsa 加密的正确方法?

    我正在尝试创建一个 WS 来发出肥皂请求 在消息正文中有一个包含加密文本的字段 我有公钥来加密文本 但我获得的唯一结果是文本无法识别 我使用节点的加密模块来发出请求 并且文本已加密 但我不知道为什么没有正确加密 PS我用 openssl p
  • 带有非字符串值的 AWS S3 x-amz-meta 错误:InvalidHeader 和 InvalidParameterType

    尝试使用node js AWS sdk时s3Client upload带有元数据的可选参数 const AWS require aws sdk const s3Client new AWS S3 params Key key secret
  • 如何按单个整数字段对 JSON 进行排序? [复制]

    这个问题在这里已经有答案了 我有以下 JSON title title order 0 order 9 order 2 JSON 包含很多字段 我如何根据字段对它们进行排序order field 我一直在寻找 Nodejs 中内置的东西 但
  • GraphQL - POST 正文丢失。您忘记使用 body-parser 中间件了吗?

    我的电脑上不断出现以下错误graphql查询但不确定原因 POST body missing Did you forget use body parser middleware 我在这里做了什么奇怪的事吗 我已经尝试了在线 body par
  • Axios GET 返回不可读的响应

    我有一个带有 axios 1 2 0 的简单 GET 的 Express 应用程序 const result AxiosResponse await axios get https jsonplaceholder typicode com

随机推荐

  • 是否有任何 Redis 客户端(Java 首选)支持 Redis 集群上的事务?

    我在网上仔细查找 但找不到提供此功能的成熟 Redis 客户端 只找到这个project 有人知道 Redis 客户端提供上述功能吗 谢谢 Redis 集群中的事务与 Redis Standalone 中的事务是不同的 TL DR 这更多的
  • jQuery 的 mouseout() 和 mouseleave() 有什么区别?

    jQuery 的 mouseout 和 mouseleave 有什么区别 mouseleave 事件与 mouseout 事件的不同之处在于它处理事件冒泡的方式 如果本例中使用了 mouseout 那么当鼠标指针移出 Inner 元素时 就
  • 使用 Inno Setup 安装 IIS

    我正在尝试使用 Inno Setup 安装 IIS 但遇到各种错误 我在 DOS 上尝试了命令并且有效 start w pkgmgr iu IIS WebServerRole IIS WebServer IIS CommonHttpFeat
  • 如何将json转换为数据表?

    有谁知道如何将 json 字符串从 asp net 转换为 DataTable 吗 我开始了解反序列化 它需要类 我只想返回数据表 谁能告诉我如何将其转换为数据表 假设您的 JSON 字符串是一个对象列表 每个对象将对应于 DataTabl
  • 如何在 Java 中解析和验证 WebSocket 帧?

    我用Java编写了一个WebSocket帧解码器 private byte decodeFrame byte rawIn int maskIndex 2 byte maskBytes new byte 4 if rawIn 1 byte 1
  • 在 Matlab 中获取神经网络的神经元权重

    I have trained a Neural Network as shown below net b返回两个值 lt 25x1 double gt 0 124136217326482 net IW返回两个值 lt 25x16 doubl
  • Laravel Request::all() 不应静态调用

    在 Laravel 中 我正在尝试调用 input Request all on a store 方法在我的控制器中 但出现以下错误 非静态方法Illuminate Http Request all 不应静态调用 假设 this来自不兼容的
  • 如何清除IOS应用程序库缓存(下载的图像)

    我正在处理下载异步图像 我从网络服务器获取了很多图像 但所有图像都是临时的 我不会缓存任何图像 但该应用程序显然将下载图像保存在 Library Caches 中 我该如何解决这个问题 有什么办法可以防止缓存下载的图像吗 或者从缓存中删除它
  • Java 调整图像大小

    我在调整图像大小时遇到 一个奇怪的问题 并且无法弄清楚我做错了什么 我读过很多帖子 其中的代码基本上与我相同 我使用java库Scalr File image new File myimage png File smallImage new
  • Android 中的 ColorPicker 不工作

    我制作了一个简单的绘图android程序用于学习 我放置了一个颜色对话框 在选择任何颜色后都可以正确显示 笔颜色没有改变 它仍然保持 黑色 默认颜色 我尝试如下 请帮助我 我的代码如下 主程序 java package com exampl
  • 在 JAX-RS 响应中使用 ISO-8601 日期

    我正在 GlassFish 4 上使用 Java EE 7 构建 RESTful Web 服务 当序列化包含以下内容的 POJO 时java util Date对象 不包括时区信息 我如何自定义对象序列化java util Date是否包含
  • 这是循环的有效实现吗?

    似乎每个涉及 R 循环的问题都会遇到 循环很糟糕 和 你做错了 以及使用建议list or tapply或者诸如此类的 我正在学习 R 并实现了以下循环来为每个因子级别创建图像文件 每次运行时因子级别的数量都会发生变化 for i in u
  • sql中使用rownum删除重复记录

    请帮助我知道根据 rownum 删除记录 即使 id 重复也不会发生 但如果是这样的话 select rownum a from a ROWNUM ID NAME 1 1 leo 1 2 2 leo 2 3 3 leo 3 4 1 leo
  • 正则表达式多行模式,具有可选的组跳过有效数据

    考虑下一个例子 payload ababaaabbb ababaaabbb ababaa pattern ab s m preg match all pattern payload matches var dump matches 预计比赛
  • 使用 Webmatrix 3 或类似的启动任务的 Windows Azure 网站(不使用 Visual Studio)

    我知道 Azure 网站制作得很简单 没有角色配置等 但我仍然想知道 在使用网站时有没有办法创建启动任务 我这样问是因为我想通过 FTP 和 Webmatrix 简化现有网站的部署 不重新编译源代码 也不使用 Visual Studio 然
  • 无法复制具有已知路径的文件句柄,但有其 HANDLE_ENTRY_INFO

    我有5个进程 我有他们的进程ID 每个进程都锁定自己的parent lock文件 我有这些parent lock数组中的文件路径称为PARENT LOCKS PATHS Using NtQuerySystemInformation and
  • 如何在 ggplot2 中绘制通过 fastshp 加载的 shapefile?

    我偶然发现fastshp库并根据描述 以及我的快速粗略测试 与相比 它确实在读取大型形状文件的时间方面提供了改进其他三种方法 我在用着read shp从maptools包加载示例数据集的函数 library maptools setwd s
  • Log4J 中限制消息长度

    我正在开发一个使用 Log4J 进行日志记录的应用程序 有时 应用程序会创建以下日志消息very长 gt 10000 个字符 当日志显示在 Eclipse 的控制台窗口中时 这会导致性能问题 我想限制最大消息长度 将长消息截断到最大长度 我
  • 未设置prepareForSegue目标控制器属性

    这是我的prepareForSegue void prepareForSegue UIStoryboardSegue segue sender id sender if segue identifier isEqual cameraToRo
  • Mongo的Cursor.nextObject有时会错误返回Null?

    我正在结合async queue and Cursor nextObject迭代游标并对返回的文档执行一些异步工作 有一个很棒的小包已经可以做到这一点 https www npmjs org package mongo cursor pro