当前位置: 首页 > 面试题库 >

MongoDB聚合期间“服务器x超时”

仰钧
2023-03-14
问题内容

我有一个脚本,可在mongodb集合上定期运行聚合。随着数据集的增长,聚合所花费的时间也随之增长。我的聚合脚本最近停止了一致的工作,并且错误日志显示: error: { [MongoError: server <x> timed out] name: 'MongoError', message: 'server <x> timed out' }
我已经尝试调试了这一点,并且我可以找到的唯一模式是,这种超时似乎仅在聚合时间超过2分钟(正确的超时)时发生2m左右)。有人为此提供其他调试提示吗?2分钟的事情给我的印象是,我只需要在某处配置一些超时,但是我无法弄清楚我在哪里或者是否陷入了红色鲱鱼陷阱。

关于系统配置:此聚合脚本是在基于阿尔卑斯的docker(v1.9.1)容器中运行的node.js(v5.9.1)应用程序。它使用mongodb节点驱动程序(v2.1.19)。运行mongod(v3.2.6)的单个mongodb服务器(尽管这也在具有replSet的单独环境中发生)


问题答案:

对于日志时间聚合,我遇到了同样的问题。我想我有适合您的解决方案。

我发现该选项socketTimeoutMS对此负责。检查您的mongo_client.js默认socketTimeoutMS值。对我来说是2min。Mongodb模块版本2.1.18。

因此,只需将此选项添加到您的url中:

mongodb://localhost:27017/test?maxPoolSize=2&socketTimeoutMS=60000

它将设置timeout为10分钟。那对我有用。



 类似资料:
  • 我使用Nodejs和MongoDB与expressjs和mongoose库,创建一个具有用户、文章和评论模式的博客API。下面是我使用的模式。

  • 主要内容:aggregate() 方法,管道MongoDB 中的聚合操作用来处理数据并返回计算结果,聚合操作可以将多个文档中的值组合在一起,并可对数据执行各种操作,以返回单个结果,有点类似于 SQL 语句中的 count(*)、group by 等。 aggregate() 方法 您可以使用 MongoDB 中的 aggregate() 方法来执行聚合操作,其语法格式如下: db.collection_name.aggregate(aggr

  • 并给我带来这些结果: {“_id”:{“name”:“city1”},“count”:212} {“_id”:{“name”:“city2”},“count”:1200} https://hexdocs.pm/mongodb/readme.html#贡献 提前谢了。

  • 我有一种情况,我需要根据一个数组值执行一个group by操作,该数组值将字段值的出现次数相加。然后对计数进行过滤,并准备结果,以便根据条件显示结果。从本质上讲,文档被转换回如果您只使用find函数就会呈现的方式。由于matchedDocuments数组中收集的项的数量,我遇到了临时文档太大的问题。任何关于如何改进这一点的建议都将是有益的。 以下是一些示例文档和基于上述标准的预期结果:

  • 我想在带有条件的集合列表中获得多个字段。我尝试了一个聚合请求,但我有一个错误。 我的请求 我的Json: 例如,我想在result中获得这个json:

  • 我有一个包含联系人的集合,每个联系人文档都有和属性。 现在我想使用Java和版本3.2中的MongoDb Java驱动程序查询数据库。 谢谢。