启动mongodb服务
首先需要建立一个文件夹,用来存放mongodb产生的数据库文件。
为了便于管理,我们将该文件夹放在mongodb安装目录下,即和bin目录平级。
mkdir /usr/local/mongodb/data
#其中/usr/local/mongodb 为本人的安装目录
在我们启动mongo后会产生数据文件和日志文件,为了便于区分和管理,我们在data目录下再分别建立两个文件夹
mkdir /usr/local/mongodb/data/db
#用来存储数据文件
mkdir /usr/local/mongodb/data/log
#用来存储日志文件
接下里我们就可以启动mongodb服务了
mongod -dbpath=/usr/local/mongodb/data/db -logpath=/usr/local/mongodb/data/log/mongodb.log
#其中dbpath表示数据文件存储路径
#logpath表示日志文件存储路径
我们会看到在终端上产生类似于这样的打印信息
因为我们启用了日志,所以更细节的过程会在日志文件中产生
日志文件中
此时这个终端代表了服务器,无法进行输入了,也不能关闭。想要操作客户端就得新打开一个终端
启动mongo客户端
重新打开一个终端,输入
mongo 启动客户端
当出现这个箭头的时候就表明mongo客户端已经启动了。
退出mongo客户端
如果想要退出客户端,输入exit
关闭mongo服务
由于打开mongo服务的那个终端输入字符也没用了,所以我们就在客户端的那个终端中来关闭服务端。
mongod -shutdown -dbpath=/usr/local/mongodb/data/db
其他注意事项
在启动mongo服务时,如果不显示指定路径,则mongo会去根目录下寻找data/db,如果没有找到,会报错。
所以我们也可以直接在根目录下建立/data/db文件夹,我们也不要在用-dbpath=xxx这个参数了。但是会有权限的问题,所以我们还是在mongo安装目录下建立数据文件存储路径,而且名字也可以随自己更改了。
如果觉得每次启动mngo服务的时候需要指定dbpath和logpath太烦了,可以在data文件下建立2个shell脚本文件,一个启动,一个关闭。把命令存到脚本文件里面,以后只需要执行这个脚本文件就行了。别忘了修改脚本文件的权限。
以下内容参考菜鸟教程|mongo
数据库结构
SQL | MongoDB | 说明 |
database | database | 数据库 |
table | collection | 数据表/集合 |
row | document | 记录/文档 |
column | field | 字段/域 |
在mongo数据库,一个mongo服务可以有多个数据库,一个数据库可以有多个集合,一个集合由多个文档构成,一个文档由多个域构成
数据库相关操作
创建/转换数据库
> use stu #如果没有则自动创建stu数据库
注意mongodb会自动创建4个数据库,admin,config,local,test。这四张表默认存在。stu是我们自己添加的
查看所有数据库
> show dbs #如果创建的数据库中没有集合则不会显示
删除数据库
> use test #选定数据库
> db.dropDatabase()
显示当前数据库
> db
创建集合
> db.createCollection(name,option) #语法格式,option为参数,可选
> db.createCollection("stu") #不带参数
> db.createCollection("stu",{capped:true,autoINdexID:true,size:100000,max:10000}) #带参数
参数说明:
capped | 布尔 | 如果为true,则创建固定集合。固定集合是指有固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为true时,必须指定size参数 |
autoIndId | 布尔 | 如果为true,则自动在_id字段创建索引。默认为false |
size | 数值 | 为固定集合指定一个最大值(以字节记) |
max | 数值 | 指定固定集合中包含文档的最大数量 |
显示当前数据库的集合
> show collections
#或者
> show tables
删除集合
> db.stu.drop()
插入文档
> db.stu.insert({
name:"zzzz",
color:"red"
})
#stu为集合,如果我们没有先创建stu集合,则mongo会自动创建
#也可以使用变量来实现插入
>document = ({
name:"zzzz",
color:"red"
})
> db.stu.insert(document)
显示文档
> db.fruit.find() #fruit为集合
更新文档
insert方法
语法格式
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数解析:
query:需要更新的值
update:更新的操作
upsert:可选参数。如果<query>的值找不到,是否插入新的值。默认为false,不插入
multi:可选参数。默认为false,表示只更新第一条数据。true,表示更新所有匹配的数据
writeConcern:可选参数,抛出异常的级别
例子:
> db.stu.update({"fruit":"apple"},{$set:{"fruit":"banana"}})
#不含参数
#将"fruit":"apple"换成"fruit":"banana"
> db.stu.update({"fruit":"apple"},{$set:{"fruit":"banana"}},{multi:true})
#更新所有匹配文档
save方法
语法格式
db.stu.save(
<document>,
{
writeConcern: <document>
}
)
参数解析:
document:文档数据
writeConcern:可选,抛出异常级别
例子:
db.stu.save( {
"_id":ObjectId("5b9872860191a2342033047b"),
"fruit":"watermolen",
"color":"red",
quality:'8kg'
})
删除文档
remove的方法
> db.stu.remove({"fruit":"watermolen"}) #删除所有符合条件的文档
> db.stu.remove({"fruit":"watermolen"},1) #删除第一条符合条件的文档
delete方法
> db.stu.deleteOne({fruit:'banana'}) #删除符合条件的第一个文档
> db.stu.deleteMany({fruit:'banana'}) #删除符合记录的所以文档
> db.stu.deleteMany() #删除符合记录的所有文档
查询文档
find结构
> db.stu.find(query, projection)
#query : 可选,查找的条件,无值表示查找全部
#projection :可选,表示在查找的结果中需要显示的值,0和1表示
> db.stu.find() #显示所有文档
> db.stu.find().pretty() #以结构化方式显示文档
> db.stu.find({"fruit":"red"}).pretty() #以结构化方式显示符合条件的文档
> db.stu.find({$or:[{fruit:'banana'},{fruit:'apple'}]}).pretty() #符合任意一个条件即可 or
> db.stu.find({fruit:'banana',color:'yellow'}).pretty() #符合全部条件 与
条件操作符
> db.stu.find({fruit:{$gt:'az'}},{_id:0})
#查询比'za'大的字符串,不显示_id
比较符说明
$gt --------- greater than >
$lt ---------- less than <
$gte ---------- gt equal >=
$lte --------- lt equal <=
$ne ---------- not equal !=
$eq ---------- equal =
模糊查询
> db.stu.find({fruit:/a/},{_id:0}) #查找包含a
> db.stu.find({fruit:/^a/},{_id:0}) #查找a开头
> db.stu.find({fruit:/a$/},{_id:0}) #查找a结尾
$type操作符
> db.stu.find({fruit:{$type:'string'}},{_id:0}) #查找类型为string
类型 | 数字 |
double | 1 |
string | 2 |
object | 3 |
array | 4 |
binary data | 5 |
undefined | 6 |
object id | 7 |
boolean | 8 |
date | 9 |
null | 10 |
regular expression | 11 |
javascript | 13 |
symbol | 14 |
javascript(with scope) | 15 |
32-bit integer | 16 |
timestamp | 17 |
64-bit integer | 18 |
min key | 255 |
max key | 127 |
limit和skip方法
> db.stu.find({},{_id:0}).limit(2) #显示前两条,不显示_id
> db.stu.find({},{_id:0}).skip(2) #跳过前两行再显示,不显示_id
混合用时,不论顺序,先执行skip(),再执行limit()
排序 sort
> db.stu.find({},{_id:0}).sort({color:1}) #color按照升序排列,不显示_id
> db.stu.find({},{_id:0}).sort({color:-1}) #color按照降序排列,不显示_id
当limit(),skip(),sort()三个一起混用时,不论排列顺序,先执行sort(),再执行skip(),最后执行limit()
索引
> db.stu.createIndex({'color':1}) #无参数,为color字段创建索引
> db.stu.createIndex({'color':1},{background :true}) #在后台创建索引
> db.stu.getIndexes() #查看当前索引