二、python数据库:mongodb数据库
一、MongoDb
1、Mongodb是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统
2、旨在为 web 应用提供可拓展的高性能数据存储解决方案
3、mongodb将数据存储为一个文档,数据结构由键值对组成,mongodb 文档类似于 json 对象,字段值可以包含其他文档、数组及文档数组
二、MongoDb数据库相关操作
1、连接数据库: mongo IP地址:端口号(默认端口号为27017)/ 数据库名(默认使用test库)
2、查询当前正在使用的数据库: db.getName( ) 或 db
3、查看全部数据库: show dbs 或 show databases
4、选择使用数据库: use 数据库 ( 若数据库不存在,则新建数据库,如果并没有对该数据库进行任何操作,则不会创建成功 )
5、删除数据库: ① 选择想要删除的数据库: use 数据库 ② 删除该数据库: db.dropDatabase( )
6、查看数据库状态: db.stats( )
7、使用数据库使用手册: db.help( )
三、MongoDb集合相关操作
1、查看当前数据库中的所有集合( 先选择数据库,指令结尾可以加上分号): show tables 或 show collections
2、集合的命名
①不能是空字符串 (" ")
②不能包含空字符 ( \0 )
③不能使用 system. 的前缀( 系统保留 )
④不建议使用保留字( "$" )
⑤用 . 分隔不同命名空间的子集合( 如:bolg.users,blog.posts )
3、创建集合: db.createCollection( "集合名" )
4、删除集合: db.集合名.drop( ) 删除成功后,返回 true ; 删除一个不存在的集合,返回 false
5、创建集合并插入数据
插入记录成功之后,mongodb 会默认为每一个文档都添加一个 _id 字段,并且同一个集合中的 _id 是唯一的
四、写数据
1、普通数据的添加(json、bson、类json)
①一次写入一条数据: db.集合.insert( {"键":"值"} ) 或者 db.集合.save( {"键":"值"} )
②一次写入多条数据: db.集合.insert ( [ {"键":"值"} , {"键":"值"} , {"键":"值"} ] )
2、多维数据对象的添加 : db.集合.insert( {"键":"值","键":{"键":"值" } } )
3、数组信息的添加: db.集合.insert( {"键":"值","键":{"键":"值" } ,"键":[ '值1','值2','值3' ] } )
4、数据的另一种写入形式:
五、查数据
1、笼统查询:
①查询集合的全部数据信息: db.集合.find( )
②查询集合的第一条数据信息: db.集合.findOne( )
③使用 pretty方法,以格式化的形式输出数据信息,使查询到的数据看起来更加直观、清晰
db.集合.find( ).pretty( )
2、条件限制查询:
①查询集合中满足条件的全部数据信息: db.集合.find( { 条件 } )
查询goods集合中,所有满足年龄为22的人的信息
②查询集合中满足条件的第一条数据信息: db.集合.findOne( { 条件 } )
3、条件范围查询: ⑴ $gt 大于 ⑵ $gte 大于等于 ⑶ $lt 小于 ⑷ $lte 小于等于
db.集合.find( { '键':{ ' $gt ' :' 值 ' } } ) 查询集合中某个键的值大于某一个值的全部信息
4、多条件查询: db.集合.find( { 条件1 , 条件2 , 条件3 } )
查询年龄大于20,且姓名为 wang 的数据信息
5、多维字段查询:当集合中含有多维数据信息的时候(即字典嵌套字典),可以使用多维字段查询
①多维字段的条件查询: db.集合.find( { "key.name":条件 } )
②多维字段的范围查询: db.集合.find( { "key.name":{ ' 范围 ':' 值 ' } } )
③多维字段的多条件查询:
6、数组条件限制查询:
① db.集合.find( { 数组的字段名:[ ' 值1',' 值2 ' ] } )
注意注意的是:只要该字段中包含查询的这个值,那么就可以查询出来,当查询这个字段的多个值时,只有当它们的顺序一致且存在时,才会查询出来,否则就会像第三次查询那样,无法查询出来
② db.集合.find( { 数组的字段名:{ ' $all ':[ ' 值1',' 值2 ' ] } } )
当配合 $all 使用时,多个值的顺序就不必与存储顺序一致了,只需存在就可以查询出来
7、限制查询字段:只查询指定的字段信息: db.集合.find.( { 条件 },{ 字段:1/ 0,字段:1/ 0 } )
find 方法的第一个参数 ( 即条件 ) 必须有,若没有条件的话,就为空字典, 1表示查询此字段, 0表示排除此字段
当想要显示多个字段时:这些字段要么全部输出 ( 全为1 ),要么全部不输出( 全为0 ), _id 字段除外,它可以任意设置 0 或 1
当不限制是否显示 _id 字段时,该字段会默认显示出来
8、$or 、 $in 、 $nin 、 $all 的使用
① $or,多条件查询,满足其中任意一个条件即可 db.集合.find( { ' $or ':[ { 条件1 },{ 条件2 } ] } )
如图,条件为:性别为男,或者年龄不小于22,只要满足至少一个条件,就会查询到
② $in / $nin : 在数组中 / 不再数组中
db.集合.find( { ' 字段 ': { ' $in ':[ ' 值1 ',' 值2 ',' 值3 ' ] } } ) 若该字段中存在这个值,就会查询出来
db.集合.find( { ' 字段 ': { ' $nin ':[ ' 值1 ',' 值2 ',' 值3 ' ] } } ) 若该字段中不存在这个值,就会查询出来
③ $all ,完全匹配,查询的字段的数组信息与其要求的相同( 没有顺序要求,且数组中可以存在要求匹配的以外的其他数据 )
如图,要求 interest 字段的数组完全匹配 eat 和 sleep ( 没有顺序要求 ),只要该数组中存在这两个数据即可,对其余的数据,如 run,则没有要求
9、自定义条件查询 $where:通过函数自定义条件[JS函数],在指定的函数中,返回boolean类型的值,this表示每个要查询的文档
db.集合.find( { $where:函数名( ) { return this.字段 条件 } } )
10、限制查询数据条数:
如下:goods集合共有10条数据
① db.集合.find( ).limit(3) 限制查询数据的条数为 3(即只可以查询到满足要求的前三跳数据)
②db.集合.find( ).skip( 2 ) 跳过查询到的前2条数据(跳过查询到的前两条)
③ limit( ) 和 skip( )结合使用: db.集合.find( ).limit(3).skip( 2) 跳过查询到的前两条数据,且只显示之后的三条数据
由此,实现分页显示: 规定,每页显示两条数据,即 limit(2),那么 skip 的参数为 2( n-1 )
11、数据查询——排序、统计、去重
① 排序查询: db.集合.find( ).sort ( { ' 字段 ':1 / -1 } ) 按该字段进行升序 / 降序查询 , 1表示升序,-1表示降序
② 统计查询: db.集合.find( ).count( ) 统计符合查询要求的数据的数量
③去重查询: db.集合.distinct( "去重字段",{ 条件 } )
六、更新数据
1、修改数据
① db.集合.update( { 条件 },{ ' $set ' :{ " 字段 ":" 值 ", " 字段 ":" 值 " ......} } )
使用 $set 修改数据时,只会修改数据指定的字段,其余字段不会被改变,也不会被删除,且每次只会修改一个数据
② db.集合.update( { 条件 },{ " 字段 ":" 值 ", " 字段 ":" 值 " ......} )
使用这种方法修改数据时,只修改指定字段信息,其余字段将会被删除
2、删除数据
db.集合.remove( { 条件 },true / false ) ,第二个参数表示:是否删除一条数据,默认为 false,即默认删除多条数据
3、删除字段: db.集合.update( { 条件 },{ " $unset ":{ 字段:1,字段:1 } } ) (字段:1 或 字段:0 都可以删除该字段)
db.集合.remove( { } ) 清空所以数据
4、修改数据的其他方法:
db.集合.update( { 条件 },{ " 修改器 ":{ 字段:值 } } ,false / true,false / true )
第一个参数: 条件,即将满足条件的字段值进行修改
第二个参数:修改器及修改字段, 修改器 $set:修改字段信息, 修改器 $inc:增加值
第三个参数:默认 false,即当修改数据时,若没有该字段,则不进行任何操作, true 表示增加这个不存在的字段与值
第四个参数:默认 false,即当有多条数据满足要求时,只修改一条, true 表示全部修改
如图:修改 age 为 20 的数据,将 age 修改为 30,并且添加新字段 sex,且满足条件的全部修改
修改 age 为 30 的数据,将 age 的值加5,且只修改一条数据
七、python 与 mongodb 交互
1、pymongo 是操作 mongodb 的 python 模块
安装:python3 -m pip install pymongo linux:sudo python3 -m pip install pymongo
2、实例