安装
sudo apt-get install mongodb
首次启动数据库的时候
如果出现这个问题 输入这两个命令
关系型数据库与mongodb的对比
关系型数据库 MongoDB 说明 database database 数据库 table collection 数据库表/集合 row document 数据库记录行/文档 column 数据属性 field 列/字段/域 index index 索引 primary key primary key 主键
2 、数据库
use 数据库的名字
查看数据库 show dbs 物理上存在的数据库
3 、集合
1 ) 创建集合
db. createCollection( 集合的名字,[ 集合的大小] )
2 ) 删除集合
db. 数据库名. drop ( )
3 ) 查看集合
show collections
数据库的相关命令
db
查看当前数据库名称
show dbs
查看当前所有数据库的名称,物理意义上存在的数据库
use 数据库名字
1、切换数据库
2、如果切换的数据库不存在也不会直接进行创建,只有数据库中插入数据了,才真正的创建成功
db.dropDatabase()
删除当前数据库,但是如果数据库不存在,不会做任何操作
数据库集合的相关命令
db.createCollection('集合名',[集合大小]) #集合大小可以不写
示例:db.createCollection('jihename')
show collections;
db.集合名.drop
数据库支持的数据类型
objectID 文档的ID string 字符串,最常用的 boolean 布尔值,true false integer 整数 double 浮点数 arrays 数组或者列表,将多个值对应存储到一条数据 object 用于存储的文档 null 存储Nu’ll timestamp 时间戳 date 存储当前时间的
插入数据
db.集合名称.insert()
注意点:
1、集合的名称可以不创建,因为使用的过程中,直接创建
2、insert()如果id 重名,不能插入数据,id是objectid 标注的是唯一的物理位置
3、插入数据的过程中,id可以不指定,不指定的化由MongoDB直接分配唯一值,id的值也可以自己指定
更新数据
db.集合名称.update(
查询条件{定位到指定的数据,where},
更新操作,
是否将符合条件的数据全部更新
)
参数1:query 查询条件,类似mysql中的where,起到定位筛选的作用 参数2:update 更新的数据以及更新操作符 参数3:multi 默认值是false,表示指更新符合条件的第一条数据,如果想更新多条符合条件的数据,需要设置成true
全文档更新
db.films.update({_id:ObjectId("5ecc6ffb67d56727d32cdbf3")},{name:'冰河世纪'})
部分属性的更新 $set
db.films.update({_id:ObjectId("5ecc6ffb67d56727d32cdbf3")},{$set:{name:'冰河世纪'}})
修改符合条件的多条文档
db.films.update({_id:ObjectId("5ecc6ffb67d56727d32cdbf3")},{$set:{name:'冰河世纪'}},{multi:true})
删除数据
db.集合名.remove(
筛选条件,
{
justOne:false
}
)
注意点:
1、justOne这个参数,默认值是false,默认删除多条,如果希望删除一条,设置为true
2、删除全部内容:db.film.remove({})
查询
find()
db.集合名.find(查询条件)
案例:
db.集合名.find() 查找所有的数据
findOne()
db.集合名.findOne()将查询符合条件的第一条数据,展示出来
比较运算符
描述 案例 等于 {字段:数值} 不等于 {字段:{$ne:值}} 大于 {字段:{$gt:值}} 大于等于 {字段:{$gte:值}} 小于 {字段:{$lt:值}} 小于等于 {字段:{$lte:值}}
逻辑运算符
db.films.find(
{$or:
[{actor:'张国荣'},{name:'花木兰'},{age:{$gt:18}}],
name:
'张一毛'
}
)
描述 语句 逻辑与关系 默认的{字段:值,字段:值…} 逻辑或关系 {$or:[{字段:值},{字段:值}…]}
支持正则
db.films.find({name:{$regex:'^张'}}) #正则规则。以张开头。这是第一种写法
db.films.find({name:/^张/}) #这是第二种写法
范围查找
db.films.find({$or:[{age:14},{age:18}]}) #等于14岁或者等于18岁的
db.films.find({age:{$in:[14,18]}}) #等于14岁和等于18岁的
查找年龄在18-28之间的
db.films.find({age:{$gt:18,$lt:28}}) #大于18小于28的
db.films.find({age:{$gte:18,$lte:28}}) #大于等于18小于等于28的
db.films.find({age:{$gte:18}}) #大于等于18岁的
自定义查询
db.films.find({$where:function(){return this.age>18}})
投影
类似select 字段1,字段2… from 表名
db.films.find({age:{
g
t
:
18
,
gt:18,
g t : 1 8 , lt:28}},{name:1,_id:0}) { “name” : “张二毛” }
注意点:
1、在find 函数中,第二个参数是表示需要展示的字段
2、如果需要展示,将这个字段的值设置为1,不设置则代表的是不显示
3、_id默认是显示的,如果需要不展示,需要设置为_id:0
统计个数
> db.films.find().count()
18
> db.films.find({age:{$gt:18}}).count()
3
> db.films.count()
18
> db.films.count({age:{$gt:18}})
3
注意点:
1、db.集合名.count({条件})
2、db.集合名.find().count()
指定读取的文档的数目和位置
db.films.find().limit(5)
db.films.find().limit()
db.films.find().skip(2)
注意点:
1、limit的参数如果不写,说明展示的是当前结合中所有的文档
2、limit的参数指定,说明需要展示的具体数目
3、skip 表示的是越过的记录条数,默认值是0
去重操作
> db.films.distinct('name')
[ "花木兰", "霸王别姬", "卡丁车", "冰河世纪", "张一毛", "张三毛", "张二毛", "张四毛" ]
> db.films.distinct('name',{age:{$gte:18}})
[ "张一毛", "张二毛" ]
注意点:
1、distinct第一个参数是需要去重的字段名
2、第二个 参数是筛选条件
db.actors.aggregate([
{$group:
{
_id:'$gender',
count:{$sum:1},
avgage:{$avg:'$age'}
}
}
])
查询年龄大于16岁中人员中,男生和女生的个数
db.actors.aggregate([
{$match:{age:{$gt:16}}},
{$group:{_id:'$gender',count:{$sum:1}}}
])
for(i=0;i<100000;i++){
db.actor.insert({name:'张'+i +'毛',age:i})
}
> db.actors.find().explain('executionStats')