MongoDB在Ubuntu上的存储过程是什么
导读:MongoDB 在 Ubuntu 上的“存储过程”实现与使用 概念澄清 Ubuntu 是操作系统,MongoDB 的“存储过程”与操作系统无关,指的是在 MongoDB 服务器端保存并调用的 JavaScript 函数。 传统关系型数据库...
MongoDB 在 Ubuntu 上的“存储过程”实现与使用
概念澄清
- Ubuntu 是操作系统,MongoDB 的“存储过程”与操作系统无关,指的是在 MongoDB 服务器端保存并调用的 JavaScript 函数。
- 传统关系型数据库的“存储过程”在 MongoDB 中通常用 服务端 JS 函数 或 聚合管道 来实现;MongoDB 也支持通过 Map-Reduce 进行复杂批处理。
历史方式与现状
- 旧方式(已不推荐):将函数存入 system.js 集合,并用 db.eval() 远程执行。官方已标注 db.eval() 为 deprecated,不建议在生产环境使用。示例:
- 保存:db.system.js.save({ _id:“add”, value:function(a,b){ return a+b; } } )
- 调用:db.eval(“add(9,3)”) // 已弃用
- 推荐方式:在 MongoDB Shell 中定义函数或使用 聚合管道/Map-Reduce 完成任务;如需在驱动/应用中复用,可将 JS 函数体作为字符串随应用逻辑执行,而非依赖 system.js 与 db.eval。
推荐做法一 服务端函数与调用
- 适用场景:需要在服务器端封装可复用的逻辑(如批量更新、统计等),但不依赖 db.eval。
- 步骤与示例:
- 连接到 MongoDB(Ubuntu 上通常使用 mongosh):mongosh
- 定义函数(在会话中定义,仅当前会话有效;如需持久化,可放入应用代码或系统库并由应用加载执行):
- function sumAB(a, b) { return a + b; }
- function bulkSetStatus(collectionName, ids, status) { return db[collectionName].updateMany( { _id: { $in: ids } } , { $set: { status: status, updatedAt: new Date() } } ); }
- 调用:
- sumAB(9, 3)
- bulkSetStatus(“orders”, [ObjectId(“…”), ObjectId(“…”)], “processed”)
- 说明:这种方式不使用 system.js 与 db.eval,符合当前最佳实践;若确需“持久化脚本”,建议放在应用或版本化脚本库中,由应用按需加载执行。
推荐做法二 聚合管道与 Map-Reduce
- 聚合管道(Aggregation Pipeline):适合数据转换、分组统计、过滤排序等,性能与可维护性更好,推荐优先使用。
- 示例:按状态分组统计订单数
- db.orders.aggregate([ { $group: { _id: “$status”, count: { $sum: 1 } } } , { $sort: { count: -1 } } ])
- 示例:按状态分组统计订单数
- Map-Reduce:适合大规模离线批处理或复杂聚合(MongoDB 4.4+ 仍支持,但聚合管道通常是更优选择)。
- 示例:统计每个用户的订单总数
- db.orders.mapReduce( function() { emit(this.userId, 1); } , function(key, values) { return Array.sum(values); } , { out: “user_order_counts” } )
- 示例:统计每个用户的订单总数
- 说明:聚合管道语法更直观、可组合性强;Map-Reduce 更灵活但编写与调优成本更高。
在 Ubuntu 上的快速操作清单
- 安装与启动(以 MongoDB 6.0 为例,其他版本替换版本号):
- sudo apt update
- sudo apt install -y mongodb-org
- sudo systemctl start mongod
- sudo systemctl enable mongod
- sudo systemctl status mongod
- 连接与验证:
- mongosh
- 在 mongosh 中执行前述函数或聚合示例
- 安全建议(生产环境):
- 编辑 /etc/mongod.conf,启用认证:
- security:
- authorization: enabled
- security:
- 重启服务:sudo systemctl restart mongod
- 创建管理员并验证登录(示例创建管理员用户):
- use admin
- db.createUser({ user: “admin”, pwd: “StrongPass!”, roles: [{ role: “userAdminAnyDatabase”, db: “admin” } ] } )
- 登录验证:mongosh -u admin -p --authenticationDatabase admin
- 编辑 /etc/mongod.conf,启用认证:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MongoDB在Ubuntu上的存储过程是什么
本文地址: https://pptw.com/jishu/775858.html
