mongodb介绍
1.什么是mongodb?
- mongodb 是由c++语言编写的,是一个基于分布式文件存储的开源数据库系统,在高负荷的情况下,添加更多的节点,可以保证服务的性能
- MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
- MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
三元素: 数据库、集合、文档
数据库是一个集合的物理容器
集合就是关系数据库中的表
文档对应着关系数据库中的行
1). 文档,就是一个对象,由键值对构成,是json的扩展Bson形式 {'name':'guojing','gender':'男’}
2). 集合:类似于关系数据库中的表,储存多个文档,结构不固定,如可以存储如下文档在一个集合中 {'name':'guojing','gender':'男'} {'name':'huangrong','age':18} {'book':'shuihuzhuan','heros':'108’}
3). 一个mongodb中可以建立多个数据库
4). 数据库:是一个集合的物理容器,一个数据库中可以包含多个集合
5). 集合:集合中可以存储多个文档
6). 文档:就是一个对象,由键值对构成,是json的扩展Bson(可以理解为在JSON的基础上添加了一些json中没有的数据类型)形式。 需要注意的是:
2.mongodb启动
1.启动
sudo service mongodb start
2.停止
sudo service mongodb stop
3.重置
sudo service mongdb restop
4.退出链接
exit/ctrl+c
3.数据库、集合相关操作
数据库基本命令
1.查看当前数据库
db
- 列出所有数据库
show dbs
3.切换数据库,如果不存在,则指向但不创建,直到插入数据或者创建集合时数据库才被创建
use 数据库名
4.查看当前数据库信息
db.stats()
5.删除数据库
db.dropDatabase()
集合的相关操作
1.创建集合
db.createCollection(name,options)
name是要创建的集合的名称
options是一个文档,用于指定集合的配置 选项参数是可选的,所以只需要到指定的集合名称
options参数:
capped 布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。
autoIndexId 布尔 (可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size 数值 (可选)为固定集合指定一个最大值.当文档达到上限时,会将之前的数据覆盖,单位为字节。如果 capped 为 true,也需要指定该字段。
max 数值 (可选)指定固定集合中包含文档的最大数量。
2.查看数据库集合
show collections
3.删除集合
db.集合名称.drop()
3.数据的增删改查
1.插入文档
- 单条插入
db.集合名称.insert({文档})
查询全部文档
db.集合名称.find()
更新文档
- update() 方法用于更新已存在的文档
db.集合名称.update()
参数:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如inc...)等,也可以 理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update 的记录,是否插入objNew,true为插入,默认是false,不插 入。
multi : 可选,mongodb 默认是false,只更新找到的第 一条记录,如果这个参数为true,就把按条件查出来多条记录 全部更新。
全文档更新
db.stu.update(
{name:'赵文竹'},
{name:'哈哈哈'}
)
指定属性更新,通过操作符$se
db.stu.update(
{name:'赵文竹'},
{
$set:{name:'啦啦啦'}
}
)
修改多条匹配到的数据
db.stu.update(
{name:'赵文竹'},
{
$set:{name:'啦啦啦'}
},
{multi:true}
)
2.save() 方法通过传入的文档来替换已有文档,如果文档的_id已经存在则修改,不存在则添加
db.stu.update(
{name:'赵文竹'},
{
$set:{name:'啦啦啦'}
}
)
pretty()
该函数,讲数据以格式化的方法展示
db.集合名称.find().pretty()
删除文档
db.集合名称.remove(document)
remove()方法基本格式:
db.collection.remove(
,
{justOne: ,}
)
参数说明
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档。
基本的数据查询
查全部
db.集合名称.find({条件文档})
查一个
db.集合名称.findOne({条件文档})
比较运算符
等于,默认是等于判断,没有运算符
小于lte
大于gte
不等于$ne
例:查询年龄大于或等于18的学生
db.stu.find({age:{$gte:18}})
逻辑运算符
1.默认是逻辑与的关系
2.逻辑或使用$or
db.stu.find(
{
$or:[
{age:{$gt:18}},
{gender:1}
]
}
)
3.and和or一起使用
例5:查询年龄大于18或性别为0的学生,并且学生的姓名为gj
db.stu.find(
{
$or:[
{age:{$gte:18}},
{gender:1}
],
name:'gj'
}
)
范围运算符
$in $nin判断是否在某个范围内
db.stu.find(
{
age:{$in:[18,28]}
}
)
支持正则表达式
使用//或者$regex编写正则表达式
db.stu.find(
{name:/^李/}
)
db.stu.find(
{
name:{$regex:'^李'}
}
)
$type
获取某一种类型的数据,使用$type
db.col.find(
{
"title" : {$type : 'string'}
}
)
limit 与Skip方法
limit() 方法 读取指定数量的数据记录
db.集合名称.find().limit(num)
Skip() 方法 使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
db.集合名称.find().skip(num)
limit() 方法、Skip() 方法 同时使用,不分先后顺序 表示跳过多少条,返回多少条
sort() 方法排序
** sort() **方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
升序
db.集合名称.find().sort({排序字段:1})
降序
db.集合名称.find().sort({排序字段:-1})
注意: skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。
distinct() 去重
db.集合名称.distinct('去重字段',{条件})
例:查找年龄大于20的姓名(去重)
db.集合名称.distinct('name',{age:{$gt:20}})
project投影(可以指定想要返回的字段)
在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段
参数为字段与值,值为1表示显示,值为0不显示
db.集合名称.find({},{字段名称:0,...})
count() 统计个数
db.集合名称.count({条件})
表示返回集合中的文档数量
db.集合名称.find().count()
db.集合名称.find({条件}).count()
在count()函数中添加条件
例:统计年龄大于20的男生人数
db.集合名称.count(
{
age:{$gt:20},
gender:1
}
)