安装
sudo apt-get install mongodb
关系型数据库与mongodb的对比
关系型数据库 MongoDB 说明 database database 数据库 table collection 数据库表/集合 row document 数据库记录行/文档 column 数据属性 field 字段/域 列/字段 index 索引 index 索引 primary key primary key
数据库的相关命令
db
查看当前数据库名称
show dbs
查看当前所有数据库的名称,物理意义上存在的数据库
use 数据库名字
1 、切换数据库
2 、如果切换的数据库不存在也不会直接进行创建,只有数据库中插入数据了,才真正的创建成功
db. dropDatabase( )
删除当前数据库,但是如果数据库不存在,不会做任何操作
数据库集合的相关命令
创建集合
db. createCollection( ‘集合名’,[ 集合的大小] )
查看
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: '冰河世纪' ,键名:‘值’,。。。} )
部分属性的更新
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( { } )
查询
db. 集合名. find( 查询条件)
案例:
db. 集合名. find( ) 查找所有的数据
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 } ] } )
db. films. find( { age: { $in : [ 14 , 18 ] } } )
查找年龄在18 - 28 之间的
db. films. find( { age: { $gt: 18 , $lt: 28 } } )
自定义查询
db. films. find( { $where: function( ) { return this. age> 18 } } )
投影
类似select 字段1 ,字段2 . . . . . . from 表名
db. films. find( { age: { $gt: 18 , $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 } } }
] )
2 .
for ( i= 0 ; i< 100000 ; i+ + ) {
db. actor. insert( { name: '张' + i + '毛' , age: i} )
}
> db. actors. find( ) . explain( 'executionStats' )