linux系统mongodb数据库基本命令操作

最近有个数据库要修改数据,存储是用的mongodb,因此在这个过程中,把常用的操作命令总结一下,以后如果长时间没弄了,再回过头来看看这篇文章,也能轻松上手

docker容器部署

Linux服务器上的MONGODB是使用DOCKER容器部署的,我们看看部署的代码

docker-compose配置文件 mongodb.yml内容如下:

version: '3'
services:  
  mongo: 
    image: 'mongo:4.0.4'
    restart: always
    ports:
      - '27017:27017'
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: mongodb
    hostname: 'db-mongo'
    container_name: 'db-mongo'
    networks:
      - database
    volumes:
      - '/k8s/db/mongodb:/data/db' 
networks:
  database:
    external: true

可以从中看到,使用到了用户鉴权认证,账号 root 密码是:mongodb,后面在进行操作时会用到。

mongodb操作

  1. 进入容器
 docker exec -it  db-mongo /bin/bash

进入到db-mongo容器后,显示如下:

root@db-mongo:/# 

此时可以输入MONGODB的操作命令了

  1. 查询所有数据库

先输入一个mongo 进入mongodb指令控制台

root@db-mongo:/# mongo
MongoDB shell version v4.0.4
connecting to: mongodb://127.0.0.1:27017
Implicit session: session { "id" : UUID("3b7a4229-71d4-4bf9-8ebc-8d935877840c") }
MongoDB server version: 4.0.4

可以看到MONGODB的版本信息,端口信息,SESSION信息等

然后切换到admin

> use admin
switched to db admin

执行show databases; 此时直接执行会报错

> show databases;
2024-11-09T02:47:37.680+0000 E QUERY    [js] Error: listDatabases failed:{
	"ok" : 0,
	"errmsg" : "command listDatabases requires authentication",
	"code" : 13,
	"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:67:1
shellHelper.show@src/mongo/shell/utils.js:876:19
shellHelper@src/mongo/shell/utils.js:766:15
@(shellhelp2):1:1

可以看到这里提示报错了,没有权限,这就要用到前面说的账号和密码了,用这些信息来做一个认证鉴权

> db.auth('root','mongodb')
1

输出1表示鉴权成功了。 我们再执行show databases;

> show databases;
admin   0.000GB
config  0.000GB
iot     5.519GB
local   0.000GB

可以看到所有的数据库,以及存储占用的空间大小,默认单位是GB

那么怎么查看数据库下面的数据集合呢

先切换数据库,以iot为例,先切换为iot数据库

> use iot
switched to db iot

再去查询有哪些集合

> show collections
iot_sensor
sensor_data

咱们这里有两个集合,我们选其中之一,去查里面的全部数据

> db.iot_sensor.find()
{ "_id" : ObjectId("5f080c386f6046000121f424"), "devNo" : "430923-001-191119-003", "devAddr" : "17", "devReg" : "0", "devValue" : "26.84", "messageId" : "1281475802076335617", "createdTime" : ISODate("2020-07-10T06:30:14.541Z"), "deleted" : false, "_class" : "com.dmlzhny.smartny.iot.mongo.entity.SensorMongo" }
{ "_id" : ObjectId("5f080c386f6046000121f426"), "devNo" : "430923-001-191119-003", "devAddr" : "17", "devReg" : "1", "devValue" : "23.88", "messageId" : "1281475802076335617", "createdTime" : ISODate("2020-07-10T06:30:14.541Z"), "deleted" : false, "_class" : "com.dmlzhny.smartny.iot.mongo.entity.SensorMongo" }

这样就基本完成了查询,那么如果要带条件查询,怎么查呢?

例如我们要查设备编号带003的记录,可以使用正则匹配

>  db.iot_sensor.find({"devNo":{$regex:/003/}});
{ "_id" : ObjectId("5f080c386f6046000121f424"), "devNo" : "430923-001-191119-003", "devAddr" : "17", "devReg" : "0", "devValue" : "26.84", "messageId" : "1281475802076335617", "createdTime" : ISODate("2020-07-10T06:30:14.541Z"), "deleted" : false, "_class" : "com.dmlzhny.smartny.iot.mongo.entity.SensorMongo" }
{ "_id" : ObjectId("5f080c386f6046000121f426"), "devNo" : "430923-001-191119-003", "devAddr" : "17", "devReg" : "1", "devValue" : "23.88", "messageId" : "1281475802076335617", "createdTime" : ISODate("2020-07-10T06:30:14.541Z"), "deleted" : false, "_class" : "com.dmlzhny.smartny.iot.mongo.entity.SensorMongo" }

结束语

这里我们只介绍查询,至于新增、修改、删除,其实也挺简单的

db.collection.insert 新增,示例:

db.collection.insert({_id:'001',devNo:"xxxx"...});

批量插入可以传入数组进行操作

db.collection.update 修改,示例:

db.collection.update({_id:'001'},{$set:{devNo:'xxxx'}},{multi:false});

update(条件,更新字段,是否更新查找出来的所有记录)

当然还有 updateOne(); 仅更新查找出来的第一条

updateMany(); 更新查找出来的所有记录

db.collection.remove 删除,示例:

db.collection.remove({});  //删除所有

db.collection.remove({_id:'001'});  // 删除查询出来的ID为001的所有记录

db.collection.remove({_id:'001'},{justOne:true});  // 删除查询出来的ID为001的第一条记录

结束语

关于mongodb的基本操作就简单介绍到这里,还有一些较为复杂的操作这里并未详细展开讲,比如多条件查询、如何分页、数据汇总等。今后有时间再来扩展补充

欢迎大家多多关注和支持! 我们一直会保持不定期更新,绝对不会放弃,让我们都遇到更好的自己!