简单的MongoDB实践
文章目录
操作环境
- 操作系统:Ubuntu 16.04
- MongoDB版本:3.6.17
如果没有安装 MongoDB 的,请参照这篇博客进行安装 Ubuntu16.04在线安装MongoDB详细教程
MongoDB认识
查看配置文件
在线安装的 MongoDB,其配置文件 mongod.conf 默认在 /etc 目录下,我们可以通过命令进行查看。
cat /etc/mongod.conf
在配置文件中, Storage:doPath指定了 MongoDB 数据库的存储路径,默认是 /var/lib/mongodb
storage:
dbPath: /var/lib/mongodb
SystemLog:Path指定了日志文件的路径,默认是 /var/log/mongodb/mongod.log。logAppend:true表示以追加的方式写入日志。
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
我们可以根据自己的需求更改 MongoDB 的存储路径,当然也可以保持默认。
MongoDB与SQL术语
SQL术语 | MongoDB术语 | 说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
MongoDB外部命令
在l操作 MongoDB 数据库之前,应该熟悉一些基本的外部操作命令,例如启动和关闭 MongoDB 等。
命令 | 说明 |
---|---|
sudo service mongodb start | 启动 MongoDB |
sudo service mongodb stop | 关闭 MongoDB |
mongo -version | 查看 MongoDB 版本 |
pgrep mongo -l | 查看 MongoDB 是否启动 |
mongo | 进入 MongoDB 的 shell 模式 |
这里我们输入对应的命令启动 MongoDB,并查看其是否启动
可以看到,MongDB 已经成功启动。
注意,如果 MongoDB 启动时报错,请参考“常见问题”进行解决。
常用Shell命令
shell命令 | 说明 |
---|---|
show dbs | 查看所有数据库 |
show users | 显示所有的用户 |
show collections | 显示当前数据库的集合 |
use DataBase_Name | 如果数据库不存在,则创建数据库,否则切换到指定数据库。DataBase_Name是数据库名 |
db | 查看当前数据库名 |
db.dropDatabase() | 删除当前数据库 |
db.stats() | 显示当前数据库的一些信息 |
db.help() | 显示数据库操作指令 |
db.myCollection.insert(xxx) | 向集合中插入文档,myCollection是集合名 |
db.myCollection.update(xxx) | 对集合中的文档进行更新,myCollection是集合名对应 |
db.myCollection.remove(xxx) | 删除集合中的对应文档,myCollection是集合名 |
db.myCollection.find().pretty() | 以格式化易读的方式显示集合中的所有文档,myCollection是集合名 |
db.myCollection.drop() | 删除指定集合,myCollection是集合名 |
MongoDB 没有类似于 create 这种创建数据库的命令,如果想创建一个名为“student”的数据库,先运行“use student”命令,之后往数据库里插入一些数据,这个数据库就创建成功了。
如果创建了数据库之后不插入数据,那么当前数据库为空,输入 show dbs命令时看不到该数据库的(MongoDB不会显示空的数据库)。一段时间内仍对其没有操作的话,该数据库会被自动删除。
在 MongoDB 中,我们不需要创建集合。当我们插入一些文档时,MongoDB 会自动创建集合。
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
使用MongoDB的Shell命令
在使用 MongoDB 的 shell 命令之前,我们应该先输入命令 mongo
进入其 shell 模式。
启动 shell 模式时可能会出现以下的一些 WARNING,这并不会影响到 MongoDB 的使用,忽略即可。
如果想要退出 shell 模式也很简单,输入 exit
命令即可。
创建数据库
我们先看一下 MongoDB 的数据库列表
show dbs
接着,我们创建一个名为 student 的数据库,并往里插入一个文档。
use student
db.res.insert({"id":100, "name":"zhangsan"})
再次查看数据库列表,可以发现 student 数据库创建成功。
查看当前数据库
- 输入命令 db 即可查看当前数据库名称
- 输入命令 db.stats() 可以查看当前数据库的详细信息
向已创建的数据库中插入任意文档
MongoDB可以不定义集合,在插入文档时集合会自动创建。
我们可以在指定集合中一次插入一条文档数据
db.test1.insert({"id":10, "name":"lisi", "age":22})
也可以一次插入多条
db.test2.insert([{"id":20, "name":"liwu", "age":20}, {"id":30,
"name":"liliu", "age":21}, {"id":40, "name":"liqi", "age":22}])
查看已插入的文档
我们先查看数据库中的集合
show collections
然后查找每个集合中的文档。查找的方法其实是 find(),pretty()方法是以易读的形式进行展示
db.res.find().pretty()
db.test1.find().pretty()
db.test2.find().pretty()
find() 方法还支持条件查找,例如我们查找 id 小于 40 的文档。具体的条件查找方法请参考这篇博客 mongodb 条件查询
更新文档中任意字段值
我们先查看 test2 集合中文档,方便做对比。
使用 update() 方法更新数据
- set中输入的键值对应,则更新对应数据
- set中输入的键值不存在,则会在文档后面添加
db.test2.update({"id":20},{$set:{'age':200}})
db.test2.update({"id":30},{$set:{'data':'hhh'}})
MongoDB中也可以使用 save() 方法进行更新,不过 save 相当于对整个文档内容的全覆盖,而不是局部更新。(sava方法一般用的很少)
如果使用save,就只需要使用 _id ,就能修改对应的数据了。
删除刚创建的文档、集合和数据库
remove() 函数可以接受一个查询文档作为可选参数来有选择性地删除符合条件的文档。删除文档是永久性的,不能撤销,也不能恢复。我们在执行 remove() 函数前最好先用 find() 命令来查看文档。
例如,我们删除 test2 集合中 id 为 20 的所有文档。
db.test2.remove({'id':20})
如果想要删除 test2 集合下的所有文档,可以使用如下方式(相当于truncate)
db.test2.remove({})
删除集合,我们直接使用 drop() 方法。如果删除集合的话,集合下现存的所有文档也会被一并删除。
db.test2.drop()
删除数据库,我们使用 dropDatabase() 方法。同样,删除数据库的话,数据库下所有现存的集合也都会别一并删除。
db.dropDatabase()
常见问题
输入“sudo service mongodb start”启动 MongoDB 时报错
Failed to start mongodb.service: Unit mongodb.service not found.
我们需要为 MongoDB 创建一个配置文件,一共是三步:
- 使用 vim 编辑器创建配置文件
sudo vim /etc/systemd/system/mongodb.service
- 在配置文件中添加如下内容
按“i”键进入编辑模式,将文本内容输入进去。按“esc”键接着输入“:wq”保存并退出。
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
[Install]
WantedBy=multi-user.target
- 输入如下命令启动 MongoDB
sudo systemctl start mongodb
sudo systemctl status mongodb
我们输入命令测试 MongoDB 是否启动成功。
pgrep mongo -l
找到了 MongoDB 进程,MongoDB 已经启动成功。
以后每次启动或关闭 MongoDB ,仍然使用 service 命令。
sudo service mongodb start
sudo service mongodb stop