MongoDB 基础入门操作
1.MongoDB 基本概念
MongoDB 中的基本概念是:文档、集合、数据
与 MySQL 对比更有助于理解,如下表所示:
SQL 术语/概念 | MongoDB 术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | \ | 表连接,MongoDB不支持 |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
2.MongoDB 创建新实例
-
默认情况下,MongoDB 在启动时 bindIP 设置为 127.0.0.1,即绑定至 localhost 网络接口,这意味着 mongod 只能接收来自本机上运行的客户端的连接
-
除非将此值设置为有效的网络接口,否则远程客户端都无法连接至 mongod
[root@localhost ~]# vim /etc/mongod.conf
10 path: /var/log/mongodb/mongod.log '//系统日志文件存放位置'
14 dbPath: /var/lib/mongo '//数据存储位置'
28 port: 27017 '//默认端口号'
29 bindIp: 127.0.0.1 '//监听地址,修改为0.0.0.0则监听所有'
[root@localhost ~]# cd /etc/
[root@localhost etc]# cp -p mongod.conf mongod-01.conf
'//生成第二个mongod数据库实例'
[root@localhost etc]# vim mongod-01.conf
'//修改,防止冲突'
10 path: /var/log/mongodb/mongod-01.log
14 dbPath: /var/lib/mongo-01
28 port: 27018
[root@localhost etc]# mkdir -p /var/log/mongodb
[root@localhost etc]# touch /var/log/mongodb/mongod-01.log
[root@localhost etc]# mkdir -p /var/lib/mongo-01
'//需要我们去主动创建目录'
[root@localhost etc]# mongod -f /etc/mongod2.conf '//指定,启动新实例'
about to fork child process, waiting until server is ready for connections.
forked process: 22623
child process started successfully, parent exiting
[root@localhost etc]# netstat -natp|grep mongod
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 14986/mongod
tcp 0 0 0.0.0.0:27018 0.0.0.0:* LISTEN 22623/mongod
[root@localhost etc]# mongo --port 27018 '//进入新实例'
3.MongoDB 基本操作
----库、集合的创建与删除----
> use test-01 '//连接或创建数据库test-01'
switched to db test-01
> db '//显示当前数据库对象或集合'
test-01
> show dbs '//显示所有数据的列表'
admin 0.000GB
config 0.000GB
local 0.000GB
'//可以看到,我们刚才新建的数据库test-01并不在数据库列表中,需要先向其插入数据'
> db.test01.insert({"name":"凯迪拉克"})
WriteResult({ "nInserted" : 1 })
> show dbs '//有了'
admin 0.000GB
config 0.000GB
local 0.000GB
test-01 0.000GB
> use test-01
switched to db test-01
> db.dropDatabase() '//切换至该数据库后执行删除命令'
{ "dropped" : "test-01", "ok" : 1 }
> show dbs '//检查是否删除成功'
admin 0.000GB
config 0.000GB
local 0.000GB
> use test-02 '//新建一个数据库test-02'
switched to db test02
> db.createCollection("test02") '//创建集合,类似于mysql中的表'
{ "ok" : 1 }
> show tables '//查看集合'
test02
> show collections '//mongodb中建议用此命令'
test02
> db.test02.drop() '//删除该集合。注意,若集合名中有符号将会报错,无法删除'
true
> show tables '//检查,删除成功'
> db.createCollection("mysql",{capped:true,size:6142800,max:10000})
{ "ok" : 1 }
'//创建集合也可以附带关键参数,以上指创建固定集合mysql(capped为true,则必须指定size参数)'
'//固定集合指有固定大小的集合,当达到最大值时会自动覆盖最早的文档'
'//size:为固定集合指定一个最大值,即字段'
'//manx:指定固定集合中包含文档的最大数量'
'//即为整个集合空间大小为6142800B,文档最大个数为10000个'
----文档操作(update、save、find、remove)----
'//在MongoDB中,当插入一些文档时,其会自动创建集合'
> db.test01.find() '//查看该集合中文档'
{ "_id" : ObjectId("6074f17d138a104252b39796"), "name" : "凯迪拉克" }
> db.test01.update({"name":"凯迪拉克"},{$set:{"name":"郑大佬"}})
'//使用update更新集合中已存在的文档,以上语句只会修改第一条发现的文档'
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test01.find()
{ "_id" : ObjectId("6074f17d138a104252b39796"), "name" : "郑大佬" }
'//若要修改多条相同的文档,需要添加{multi:true}'
'//save用于替换以后文档,id主键存在则更新,不存在则插入'
> db.test01.save({"name":"SICONG"}) '
WriteResult({ "nInserted" : 1 })
> db.test01.find()
{ "_id" : ObjectId("6074f17d138a104252b39796"), "name" : "郑大佬" }
> db.test01.save({"_id" : ObjectId("6074fa3d138a104252b3979a"), "name" : "sicong"}) '//记得开头指定id,否则将为插入新文档操作'
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test01.find()
{ "_id" : ObjectId("6074f17d138a104252b39796"), "name" : "sicong" }
'//remove用来移除集合中的数据'
'//执行remove前建议先执行find判断执行的条件是否正确,养成良好习惯'
> db.test01.insert({"name":"xcf"})
WriteResult({ "nInserted" : 1 })
> db.test01.insert({"name":"zxc"}) '//新建两条数据做删除练习'
WriteResult({ "nInserted" : 1 })
> db.test01.find() '//检查'
{ "_id" : ObjectId("6074fde58412f502a7fdb268"), "name" : "sicong" }
{ "_id" : ObjectId("6074fe098412f502a7fdb269"), "name" : "xcf" }
{ "_id" : ObjectId("6074fe0c8412f502a7fdb26a"), "name" : "zxc" }
> db.test01.remove({"name" : "sicong"}) '//删除sicong数据'
WriteResult({ "nRemoved" : 1 })
> db.test01.find() '//再次检查'
{ "_id" : ObjectId("6074fe098412f502a7fdb269"), "name" : "xcf" }
{ "_id" : ObjectId("6074fe0c8412f502a7fdb26a"), "name" : "zxc" }
> db.test01.remove({}) '//删除所有数据'
WriteResult({ "nRemoved" : 2 })
> db.test01.find()