MongoDB 基本使用
一、数据库操作
-
连接数据库
1 | mongo --host 192.168.0.21 --port 27017 |
-
查看数据库
1 | show dbs |
-
创建库
1 2 3 4 | use test_db # 库存在就切换到该库,不存在就创建。刚创建的数据库不显示在 show dbs 列表中,如要显示需插入数据。 db.test_col.insert({name: "aaa" }) show dbs |
-
查看当前所在数据库
1 |
-
删除库
1 | db.dropDatabase() |
二、文档操作
-
插入文档
1 2 3 4 5 | db.test_doc.insert({name: "zhangsan" , age: 18, job: "Student" }) # 3.2 版本之后引入的新方法 db.test_doc.insertOne({name: "zhangsan" , age: 18, job: "Student" }) db.test_doc.insertMany([{name: "zhangsan" , age: 18, job: "Student" }, [{name: "wangwu" , age: 19, job: "Teacher" }]) |
-
查询文档
1 2 3 4 5 6 7 8 | # 查看集合 show collections # 查询所有文档 db.test_doc. find ({}) # 查询 name 是 zhangsan 的文档 db.test_doc. find ({name: "zhangsan" }) |
-
更新文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | db.test_doc.update({name: "zhangsan" }, {$ set : {name: "wangwu" }}) db.test_doc. find ().pretty() # 通过 save 方法替换已存在的文档 db.test_doc.save({ "_id" :ObjectId( "5ff475f26f2a2d9739aad1a3" ), name: "lisi" , age: 19, job: "IT" }) db.test_doc.insert({name: "a1" , count: 2}) db.test_doc.insert({name: "b1" , count: 3}) db.test_doc.insert({name: "c1" , count: 10}) db.test_doc.insert({name: "d1" , count: 20}) db.test_doc.insert({name: "e1" , count: 30}) # 只更新满足条件的第一条 db.test_doc.update({count: {$gt: 10}}, {$ set : { "name" : "big_d1" }}, false , false ) # 更新满足条件的所有的 db.test_doc.update({count: {$gt: 5}}, {$ set : { "res" : "big_big" }}, false , true ) # 只添加第一条 db.test_doc.update({count:{$gt: 5}}, {$ set : { "hello" : "wow" }}, true , false ) # 全部添加进去 db.test_doc.update({count:{$gt: 5}}, {$ set : { "status" : "ok" }}, true , true ) # 3.2 版本之后引入的新方法 db.test_doc.updateOne({count: {$gt: 5}}, {$ set : { "res" : "big_big" }}) db.test_doc.updateMany({count: {$gt: 5}}, {$ set : { "res" : "big_big" }}) db.test_doc.replaceOne({count: {$gt: 5}}, {$ set : { "res" : "big_big" }}) |
-
删除文档
1 2 3 4 5 6 7 8 9 | # 删除满足条件的第一条 db.test_doc.remove({count: {$gt: 5}}, 1) # 删除所有 db.test_doc.remove({}) # 3.2 版本之后引入的新方法 db.test_doc.deleteOne({}) db.test_doc.deleteMany({}) |
三、用户管理
为了安全起见 mongodb 配置文件中加入 auth = true
以开启权限认证
yaml版本的配置
1 2 | security: authorization: enabled |
1 2 3 4 5 6 7 8 9 | # 为 test_db 库创建一个可读写的用户 use test_db db.createUser({user: "test_user" , pwd : "123456" , roles: [{role: "readWrite" , db: "test_db" }]}) show users db.changeUserPassword( "test_user" , "112233" ) # 带用户名密码连接 mongo mongo --host 192.168.0.21 --port 27017 -u test_user -p 112233 --authenticationDatabase test_db |
MongoDB 内置角色有如下:
-
数据库用户角色:read、readWrite
-
数据库管理角色:dbAdmin、dbOwner、userAdmin
-
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
-
备份恢复角色:backup、restore
-
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
-
超级用户角色:root -- 这里还有几个角色间接或直接提供了系统超级用户的访问 (dbOwner 、userAdmin、userAdminAnyDatabase)
-
内部角色:__system
四、mongodb 备份还原 / 导出导入
1. 备份整个库
1 | mongodump -h 127.0.0.1:27017 -u root -p 'password' --authenticationDatabase admin -d dbName -o /data/backup/ |
2. 还原整个库
1 2 | mongorestore -h 127.0.0.1:27017 -u root -p 'password' --authenticationDatabase admin -d dbName -- dir /data/backup/ # 可以加上 --drop 参数, 意思是恢复前先删除当前数据(谨慎使用) |
3. 导出一个 collection
1 2 3 4 | mongoexport -h 127.0.0.1:27017 -u root -p 'password' --authenticationDatabase admin -d dbName -c collectionName -o /data/backup/collectionName .json -- type json # 也可以导出 csv 格式的数据。--type csv, -f 指定导出数据的字段 mongoexport -h 127.0.0.1:27017 -u root -p 'password' --authenticationDatabase admin -d dbName -c collectionName -o /data/backup/collectionName .csv -- type csv -f "_id,user_id,user_name,age,status" |
4. 导入一个 collection
1 | mongoimport -h 127.0.0.1:27017 -u root -p 'password' --authenticationDatabase admin -d dbName -c collectionName -- file /data/backup/collectionName .json |
以上就是 MongoDB 的基本使用。更多内容还是参考官方文档:https://docs.mongodb.com/manual/crud/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗