2026年,我为什么劝你认真考虑UK Biobank数据库?
2026/4/18 20:52:57
Q: 什么是MongoDB?
A: 一个以 JSON 为数据模型的文档数据库。
Q: 为什么叫文档数据库?
A: 文档来自于“JSON Document”,并非我们一般理解的 PDF,WORD。
Q: 谁开发MongoDB?
A: 上市公司 MongoDB Inc.,总部位于美国纽约。
Q: 主要用途有哪些?
A: OLTP\OLAP数据库,类似于 Oracle, MySQL,海量数据处理,数据平台。
Q: 主要特点是什么?
A: 无模式或可选。友好的JSON数据模型,开发方便。
Q: MongoDB 是免费的吗?
A: MongoDB 有两个发布版本:社区版和企业版。企业版基于商业协议,需付费。
| 类型 | MongoDB | RDBMS |
|---|---|---|
| 数据模型 | JSON | Relational |
| 数据库类型 | OLTP/OLAP | OLTP/OLAP |
| CRUD 操作 | MQL/SQL | SQL/SQLX |
| 高可用 | 原生Replica-Set | Cluster、中间件 |
| 横向扩展能力 | 原生MSC | 分片、中间件 |
| 索引支持 | B-Tree、F-text、GIS、multikey、HASH、TTL | B-Tree |
| 开发难度 | easy | hard |
| 数据容量 | 无理论上限 | 千万、亿 |
| 扩展方式 | 垂直扩展+水平扩展 | 垂直扩展 |
| MySQL | MongoDB |
|---|---|
| database | database |
| table | collection |
| row | document |
| RDBMS | MongoDB |
|---|---|
| Table, View | → Collection |
| Row | → Document |
| Index | → Index |
| Join | → Embedded Document |
| Foreign Key | → Reference |
| Partition | → Shard |
cd/data/downloadwgethttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.16.tgz# 5x版本下载地址:wgethttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.12.tgz[root@node01 nosql]# mkdir -p /data/mongodb && cd /data/mongodb[root@node01 nosql]# cd /data/download[root@node01 nosql]# tar zxvf mongodb-linux-x86_64-rhel70-6.0.16.tgz[root@node01 nosql]# mv /data/download/mongodb-linux-x86_64-rhel70-6.0.16 /data/mongodb/mongodb60echonever>/sys/kernel/mm/transparent_hugepage/enabledechonever>/sys/kernel/mm/transparent_hugepage/defrag# 开机自启动vi/etc/rc.local# 添加:iftest-f /sys/kernel/mm/transparent_hugepage/enabled;thenechonever>/sys/kernel/mm/transparent_hugepage/enabledfiiftest-f /sys/kernel/mm/transparent_hugepage/defrag;thenechonever>/sys/kernel/mm/transparent_hugepage/defragfi# 创建用户和组useraddmongodb# 创建目录cd/data/mongodb/mongodb60mkdir-p{auth,conf,shardi_27017/(data,log)}# 修改权限chown-R mongodb:mongodb /data/mongodb# 环境变量cat>>/etc/profile<<EOF export MONGODB_HOME=/data/mongodb/mongodb60 export PATH=$MONGODB_HOME/bin:$PATHEOFsource/etc/profile# 为mongodb用户添加环境变量su- mongodbcat>>~/.bash_profile<<EOF export MONGODB_HOME=/data/mongodb/mongodb60 export PATH=$MONGODB_HOME/bin:$PATHEOFsource~/.bash_profilecat>/data/mongodb/mongodb60/conf/mongodb.conf<<EOF systemLog: destination: file logAppend: true path: /data/mongodb/mongodb60/shardi_27017/log/shardi.log storage: dbPath: /data/mongodb/mongodb60/shardi_27017/data journal: enabled: true wiredTiger: engineConfig: directoryForIndexes: true configString : cache_size=1G processManagement: fork: true pidFilePath: /data/mongodb/mongodb60/shardi_27017/log/shardi.pid timeZoneInfo: /usr/share/zoneinfo net: port: 27017 bindIp: 0.0.0.0 maxIncomingConnections: 1000 unixDomainSocket: enabled: true pathPrefix: /data/mongodb/mongodb60/shard1_27017/data filePermissions: 0700 #security: # keyFile: /data/mongodb/mongodb60/auth/keyfile.key # authorization: enabled EOFsystemLog:日志相关storage:数据存储相关processManagement:进程控制net:网络配置security:安全验证(需后续开启)openssl rand -base64512>/data/mongodb/mongodb60/auth/keyfile.key# 或手动生成echo"mongodb123456">/data/mongodb/mongodb60/auth/keyfile.keychmod600/data/mongodb/mongodb60/auth/keyfile.key# 启动/data/mongodb/mongodb60/bin/mongod -f /data/mongodb/mongodb60/conf/mongodb.conf# 登录并创建用户mongo --port=27017>use admin db.createUser({user:"root", pwd:"000000", roles:[{role:"root", db:"admin"}]})# 关闭>db.shutdownServer()# 修改配置文件开启安全验证vim/data/mongodb/mongodb60/conf/mongodb.conf# 取消security注释# 重启/data/mongodb/mongodb60/bin/mongod -f /data/mongodb/mongodb60/conf/mongodb.conf# 使用密码登录mongo --port=27017>use admin>db.auth('root','000000')db.createUser({user:"<name>",pwd:"<cleartext password>",roles:[{role:"<role>",db:"<database>"}|"<role>",...]})// 创建超级管理员db.createUser({user:"root",pwd:"000000",roles:[{role:"root",db:"admin"}]})// 创建app数据库读写用户db.createUser({user:"app01",pwd:"app01",roles:[{role:"readWrite",db:"app"}]})// 更新密码db.changeUserPassword("app01","app01_000000")// 添加角色db.grantRolesToUser("app01",[{role:"read",db:"test"}])// 删除用户db.dropUser("app03")read、readWritedbAdmin、dbOwner、userAdminclusterAdmin、clusterManager、clusterMonitor、hostManagerbackup、restorereadAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabaseroot__system(危险,不可分配)// 获取帮助help db.help()db.collection.help()// 常用操作db.version()db.getName()show dbs use<db>db.stats()db.getMongo()nulltrue/false3、3.14"egon"new Date()/pattern/[1, "a", "v"]{addr: {country: "China", city: "YT"}}ObjectId()db.collection.insertOne({name:"apple"})db.collection.insertMany([{name:"apple"},{name:"pear"},{name:"orange"}])db.collection.find(query,projection)db.collection.find().pretty()// 示例db.movies.find({"year":1975})db.movies.find({$or:[{"year":1989},{"title":"Batman"}]})| SQL | MQL |
|---|---|
| a=1 | {a:1} |
| a<>1 | {a:{$ne:1}} |
| a>1 | {a:{$gt:1}} |
| a≥1 | {a:{$gte:1}} |
| a<1 | {a:{$lt:1}} |
| a≤1 | {a:{$lte:1}} |
| SQL | MQL |
|---|---|
| a=1 and b=1 | {a:1, b:1} 或 {$and: [{a:1}, {b:1}]} |
| a=1 or b=1 | {$or: [{a:1}, {b:1}]} |
| a IS NULL | {a: {$exists: false}} |
| a IN (1,2,3) | {a: {$in: [1,2,3]}} |
$lt、$lte、$gt、$gte$ne、$in、$nin$or、$anddb.fruit.find({"from.country":"China"})db.fruit.find({color:"red"})db.fruit.find({$or:[{color:"red"},{color:"yellow"}]})db.movies.find({"filming_locations.city":"Rome"})db.movies.find({"filming_locations":{$elemMatch:{"city":"bj","country":"CHN"}}})db.movies.find({},{"_id":0,title:1})db.movies.find({title:"ddd"},{"year":0,"category":0})db.testool.remove({a:1})db.testool.remove({a:{$lt:5}})db.testool.remove({})db.fruit.updateOne({name:"apple"},{$set:{from:"China"}})db.user.update({name:"user1"},{name:"user11"})db.user.update({name:"user2"},{$set:{name:"MongoDB"}})db.test.update({title:"MongoDB"},{$set:{title:"New Mongo"}},{multi:true})$push/$pushAll$pop$pull/$pullAll$addToSetdb.test.update({_id:1},{$push:{ary:5}})db.test.update({_id:2},{$pop:{ary:1}})db.test.update({_id:1},{$pull:{ary:4}})db.test.update({_id:2},{$addToSet:{ary:7}})db.collection.drop()use tempDB db.dropDatabase()yuminstall-y python3 pip3installpymongofrompymongoimportMongoClient uri="mongodb://root:000000@127.0.0.1:27017"client=MongoClient(uri)db=client["eshop"]user_coll=db["users"]new_user={"username":"nina","password":"xxxx","email":"123456@qq.com"}result=user_coll.insert_one(new_user)print(result)on操作MongoDB### 5.1 安装 Python MongoDB 驱动程序```bash yum install-y python3 pip3 install pymongofrompymongoimportMongoClient uri="mongodb://root:000000@127.0.0.1:27017"client=MongoClient(uri)db=client["eshop"]user_coll=db["users"]new_user={"username":"nina","password":"xxxx","email":"123456@qq.com"}result=user_coll.insert_one(new_user)print(result)