当前位置: 首页 > 知识库问答 >
问题:

如何遍历整个mongo数据库,因为它太大而无法加载?[重复]

党航
2023-03-14

我必须为我公司的一位客户做一些数据处理。他们有一个大约4.7GB数据的数据库。我需要为每个文档添加一个字段,该字段使用mongo文档的两个属性和一个外部引用进行计算。

我的问题是,我不能收集。find()是因为节点。js内存不足。迭代整个集合的最佳方式是什么?集合太大,无法通过单个调用加载,无法查找?

共有1个答案

司马飞
2023-03-14

是的,有办法。Mongo设计用于处理大型数据集。

您可能正在运行内存溢出,不是因为db.collection.find(),而是因为您试图使用db.collection.find(). toArray()之类的东西一次性转储它。

对大于内存的结果集进行操作的正确方法是使用游标。以下是您在mongo控制台中的操作方法:

var outsidevars = {
   "z": 5
};

var manipulator = function(document,outsidevars) {
    var newfield = document.x + document.y + outsidevars.z;
    document.newField = newfield;
    return document;
};

var cursor = db.collection.find();

while (cursor.hasNext()) {
    // load only one document from the resultset into memory
    var thisdoc = cursor.next();
    var newnoc = manipulator(thisdoc,outsidevars);
    d.collection.update({"_id": thisdoc['_id']},newdoc);
};
 类似资料:
  • 本文向大家介绍java遍历读取整个redis数据库实例,包括了java遍历读取整个redis数据库实例的使用技巧和注意事项,需要的朋友参考一下 redis提供了灵活的数据查询方式,最牛的就是key的搜索支持正则表达式。 jedis.keys(“*”);表示搜索所有key jedis.keys(“abc*”)表示搜索开头为abc的key数据 遍历了key就能遍历到value。 其实就是一个set r

  • sry如果这个问题是noob(我是新来的)。。。 我一直试图设置我的应用程序连接到数据库,但我得到了这个错误,我似乎找不到问题。 这是密码 当我试着运行nodemon并打开http://localhost:3000/

  • 我要做的是遍历Firebase数据库,看看是否有某个值,如果有,则什么也不做,如果没有,则向节点添加另一个值。 我的Firebase收藏是这样的: 同样,我不确定这是不是正确的代码,但它是类似的。我用这个答案作为帮助,但不能根据我的需要调整它:Firebase/Android如何获得子键和值? 还有一个问题,我得到的是,我的数据库是无限填一遍又一遍。

  • 问题内容: 我有一个带有php include的Div Tag,该div用来填充该信息,我想要做的是使它每隔15秒调用一次,以便它可以在那里更新信息,而不必重新加载整个网页。我试图用JavaScript / jQuery做到这一点,但似乎无法正常工作 这是我在搜索一些内容后所拥有的,然后发生的是,它加载了Small.php,但不会每15秒刷新一次或更新信息。 请帮忙! 我应该添加所有应显示的php

  • 问题内容: 我正在用Java编写程序,我需要做的一件事情就是为每个最短路径问题创建每个有效位置的集合。位置在.txt文件中定义,该文件遵循严格的模式(每行一个条目,没有多余的空格),非常适合使用.nextLine获取数据。我的问题是,文件中有241行(从432行中删除),扫描程序在通过条目的3/4处停止工作,并且无法识别任何新行。 我的代码: 数据 当然,“扫描仪在这里停止读取”不在数据中,我只是

  • 问题内容: 是否可以在linux服务器上复制整个MySQL数据库? 我知道我可以使用导出和导入,但是原始数据库大于25MB,所以并不理想。 是否可以使用mysqldump或直接复制数据库文件? 问题答案: 首先创建重复的数据库: 确保所有用户和权限都到位,并且: