我的编程空间,编程开发者的网络收藏夹
学习永远不晚

集算器协助MongoDB计算之数位比较

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

集算器协助MongoDB计算之数位比较

  Mongodb脚本解决复杂问题的计算能力有限,直接使用时较为吃力。很多情况下需要将数据读出后在主程序中进一步完成运算,而在Java等高级语言中编写这类集合式运算也比较麻烦。这时可以用集算器esProc来辅助,这里通过一个例子来说明。

Mongodb中有一个test集合如下:

>db.test.find({},{"_id":0})

{"value" : NumberLong(112937552) }

{"value" : NumberLong(715634640) }

{"value" : NumberLong(487229712) }

{"value" : NumberLong(79198330) }

{"value" : NumberLong(440998943) }

{"value" : NumberLong(93148782) }

{"value" : NumberLong(553008873) }

{"value" : NumberLong(336369168) }

{"value" : NumberLong(369669461) }

具体的:test集合包含多个value,每个value是一个数字串。每个数字串都要和另外所有的数字串比较,找出每个数字串的最大相同数和最大不同数。如果第1行和第n行都含有数字1,就算相同数有1个,如果第1行有1第n行没有,就算不同数有1个。

  集算器代码如下:

集算器协助MongoDB计算之数位比较

A1:连接mongodb,ip和端口号是localhost:27017,数据库是test,用户名和密码都是test。

  A2:使用find函数从mongodb中取数,形成游标。集合是test,过滤条件是空,键_id不取出。可以看出,esProc在find函数中采用了和mongdb的find语句一样的参数格式。esProc的游标支持分批读取和处理数据,可以避免数据量过大,内存出现溢出的情况。这里因为数据量不大,所以用fetch出游标的所有记录。

  A3:在A2的基础上增加两列,用来存放最大相同数和最大不同数。同时把value转成字符串。

  A4:针对A3集合循环,循环体是B4到D10。

B4:取当前循环的value。

C4:利用函数将value分拆成单个字符组成的序列,去掉重复的值。

B5:对A3再进行一次内层循环。循环体是C6到D10。

C5:如果内层循环的循环位置和外层当前位置的相等,也就是说是同一个value的话,就跳过本次内层循环,进行下一次内层循环。

C6:取得内层循环的value。

C7:定义两个变量same和diff,分别存放本次比较的相同数和不同数,初始值为0。

C8:利用循环函数,在内层循环的value中逐个查找外层循环的value分拆的序列数值。如果能找到,则same自加1,否则diff自加1。

C9、C10:将same和diff和A4中的same和diff比较,将较大的重新赋值给A4中的same和diff。

运行结果是:

集算器协助MongoDB计算之数位比较

需要说明的是:esProc并不包含mongodb的java驱动包。用esProc来访问mongodb,必须提前将mongodb的java驱动包(要求2.12.2或以上版,如mongo-java-driver-2.12.2.jar)放到[esProc安装目录]\common\jdbc中。

集算器esProc协助mongodb计算的脚本很容易集成到java中,只要增加一行A11,写成result A3即可向java输出resultset形式的结果,具体的代码参考esProc教程。同样,用java调用esProc访问mongodb也必须将mongdb的java驱动包放到java程序的classpath中。




免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

集算器协助MongoDB计算之数位比较

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP如何使用键名比较计算数组的差集

使用键名比较计算数组差集,即找出第一个数组中存在但不在第二个数组中的元素。PHP中提供了array_diff_key()函数,可根据键名比较两个数组,返回差集。另外,也可以手动比较键名计算差集。array_diff_key()通常更快,但对于小数组,手动比较的性能差异可以忽略不计。
PHP如何使用键名比较计算数组的差集
2024-04-02

Java如何使用键名比较计算数组的差集

Java中利用键名比较计算数组差集的方法:创建两个HashMap,存储数组元素及其出现次数。遍历数组并插入HashMap,若元素已存在则计数增加。比较HashMap,将第二个HashMap中不存在于第一个HashMap中的键名添加到差集中。获取差集,即第二个HashMap中不包含于第一个HashMap中的键名集合。
Java如何使用键名比较计算数组的差集
2024-04-02

PHP如何使用键名比较计算数组的交集

本文介绍了一种使用键名比较来计算PHP数组交集的方法。此方法高效、准确,但仅适用于具有唯一键名的数组。它不考虑元素值,因此对于需要比较元素值的情况,可能需要其他方法。替代方法包括使用多维数组、集合操作或散列表。
PHP如何使用键名比较计算数组的交集
2024-04-02

Java如何使用键名比较计算数组的交集

本篇教程介绍了如何使用键名比较来计算数组交集。该算法通过将数组转换为Map,然后遍历其中一个Map的键名,检查是否存在于另一个Map中,从而实现元素的唯一性。实现简单易懂,代码示例和详细介绍有助于理解。
Java如何使用键名比较计算数组的交集
2024-04-02

PHP如何计算数组的交集,用回调函数比较数据

PHP中,利用回调函数可计算数组交集。array_intersect_uassoc()函数接受两个数组和一个回调函数,用于比较数组元素的相等性。回调函数返回0表示相等,-1表示小于,1表示大于。此方法适用于自定义或复杂比较场景,比松散比较性能更高,需考虑回调函数复杂度对性能的影响。
PHP如何计算数组的交集,用回调函数比较数据
2024-04-02

Java如何计算数组的交集,用回调函数比较数据

本文讲述了在Java中计算数组交集的方法,涉及迭代和比较。通过使用嵌套循环,可以比较每个元素并找出公共元素集合。介绍了使用回调函数和lambda表达式来提高效率和简化代码,从而实现自定义比较逻辑。
Java如何计算数组的交集,用回调函数比较数据
2024-04-02

PHP如何用回调函数比较数据来计算数组的差集

PHP中,可使用回调函数比较数组元素,计算差集。array_udiff()函数需三个参数:第一个数组、第二个数组,以及一个比较回调函数。回调函数需返回整数,表示比较结果:-1(小于)、0(等于)、1(大于)。示例代码展示了计算差集的过程,输出结果为第一个数组中大于第二个数组的所有元素。其他计算差集的方法包括使用array_diff()和set_diff()函数,需注意回调函数的格式和数组对象的处理方式。
PHP如何用回调函数比较数据来计算数组的差集
2024-04-02

Java如何用回调函数比较数据来计算数组的差集

Java中可以使用回调函数比较数据来计算数组差集,提高灵活性。先定义自定义回调函数,实现Comparator接口并覆盖compare方法。再使用Arrays.sort对数组排序,然后用Arrays.binarySearch查找另一个数组中的索引,不存在则加入差集。此方法灵活性高、效率高、可扩展性强,但也更复杂,在处理超大数组时性能受限。
Java如何用回调函数比较数据来计算数组的差集
2024-04-02

PHP如何用回调函数比较键名来计算数组的交集

PHP中使用回调函数比较键名计算数组交集是一种灵活、高效的方法。自定义回调函数可自定义键名比较逻辑,满足特定需求。通过array_intersect_ukey()函数,使用哈希表快速比较键名。回调函数应始终返回整数,确保结果准确性。灵活性、效率和可读性是该方法的优势,可应用于各种场景。
PHP如何用回调函数比较键名来计算数组的交集
2024-04-02

PHP如何用回调函数对键名比较计算数组的差集

PHP中使用回调函数比较键名计算数组差集是一种高效灵活的方法。通过定义回调函数,可以自定义比较逻辑。array_diff_ukey()函数使用该回调函数计算差集,其中回调函数需要比较两个键名并返回整数。根据比较结果,array_diff_ukey()返回一个新的数组,包含$array1中但$array2中不存在的元素。
PHP如何用回调函数对键名比较计算数组的差集
2024-04-02

编程热搜

目录