MongoDB数据库的使用

MongoDB的优势

                        1.易扩展,这也是非关系数据库共有的优势

                        2.大数据量,高性能,非常高的读写性能

                        3.灵活的数据模型,无需事先为要存储的数据建立字段

MongoDB的安装

                          1.pip install mongodb

                           2. 启动:sudo service mongod start 或者 sudo mongod --config /usr/local/mongodb/mongodb.conf

                            3.停止:sudo service mongod stop

                            4.重启:sudo service mongod restart

                            5.查看是否启动成功:ps ajx|grep mongod

                            6.配置文件的位置:/etc/mongod.conf

                            7.默认端口:27017

                            8.日志的位置:/var/log/mongodb/mongod.log   

数据库的命令

1.查看当前的数据库:db

2.查看所有的数据库:show dbs

3.切换数据库:use 数据库名字

4.删除当前的数据库:db.dropDatabase()  

集合的命令

1.不手动创建集合:行不存在的集合中第一次加入数据时,集合会被创建出来

2.手动创建集合:db.createCollection(name,options)

例如:db.createCollection('sub',{capped:true,size:10})

参数capped:默认为false表示不设置上限

参数size:指定文档上限,单位为字节,托超过上限,会将前面的文档覆盖

3.查看集合:show collections

4.删除集合:db.集合名字.drop()

数据类型

1.Object ID:文档ID

2.String:字符串,最常用

3.Boolean:存储一个布尔值,true或false

4.Integer:整数可以是32位或64位

5.Double:存储浮点值

6.Object:用于嵌入式的文档,即一个值为一个文档

7.Null:存储Null值

8.Timestamp:时间戳,表示从1970-1-1到现在的总秒数

9.Date:存储当前日期或时间的UNIX时间格式

10.创建日期语句如下:参数的格式为YYYY-MM-DD

new Date('2020-01-01')

11.每个文档都有一个属性:_id 保证每个文档的唯一性

可以自己去设置_id插入文档,如果没有提供,那么MongDB为每个文档提供一个独特的_id,类型为objectID

插入

1.db.集合名字.insert(document)

例如:db.stu.insert({_id:'20200101',name:'gj',gender:1})

保存

db.集合名字.save(document)

如果文档的_id已经存在则修改,不存在则添加

查询

db.集合名字.find()

更新

db.集合名称.update(,,{multi:})

query:查询条件

update:更新操作符

multi:可选,默认是false,表示只更新找到的第一条记录,值位true表示把满足条件的文档全部更新

例如:db.stu.update({name:'hr'},{name:'mnc'}) 更新一条,把全部内容替换

db.stu.update({name:'hr'},{$set:{name:'mnc'}}) 更新一条,指定一个键对应的值

db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部

删除

db.集合名字.remove(,{justOne:})

query:删除文档的条件

justOne:设置为ture或1,则只删除一条,默认false,表示删除多条

比较运算符

等于:默认是等于,没有运算符

小于:$it

小于等于:$ite

大于:$gt

大于等于:$gte

不等于:$ne

例如:db.stu.find({age:{$lte:18}})


范围运算符

$in,$nin判断是否在某个范围内

例如:db.stu.find({age:{$in:[18,28,38]}}) 


逻辑运算符

and:并且,和

db.stu.find({age:{$gte:18},gender:true})

or:使用$or,值为数组

db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})


高级查询

1.db.集合名字.find({文档条件})

2.db.集合名字.findone({文档条件}) 只返回一条

3.db.集合名字.find({条件文档}).pretty() 将结果格式化输出

4.支持正则表达式:使用//或$regex编写

例如:db.products.find({sku:/^abc/})

            db.products.find({sku:{$regex:'789$'}})

5.limit:用于读取指定数量得文档

例如:查询2条学生信息

db.stu.find().limit(2)

6.skip:用于跳过指定数量得文档

db.stu.find().skip(2)

可以同时使用db.stu.find().limit(3).skip(2)

7.自定义查询

使用$where后面写一个函数,返回满足条件得数据查询年龄大于30得学生

db.stu.find({$where:function(){return this.age>30;}})

8.投影:在查询到得返回结果中,只选择必要得字段db.集合名字.find({},{字段名称1,...})

参数为字段与值,值为1表示显示,值为0不显,特殊:对于_id列默认是显示得,如果不显示需要明确设置为0

例如:db.stu.find({},{_id:0,name:1,gender:1})

9.排序:方法sort(),用于对集进行排序

db.集合名称.find().sort({字段:1,...})

参数1为升序,-1为降序

例如:根据性别降序,在根据年龄升序

db.stu.find().sort({gender:-1,age:1})

10.统计个数:方法count()

db.集合名字.find({条件}).count()

db.集合名字.count({条件})

db.stu.find({gender:ture}).count()

db.stu.count({age:{$gt:20},gender:true})


数据备份和恢复

数据备份

mongodump -h dbhost -d dbname -o dbdirectory

-h:服务器地址,也可以指定端口号

-d:需要备份的数据库名称

-o:备份的数据存放位置,此目录中存放着备份出来的数据

数据恢复

mongorestore -h dbhost -d dbname --dir dbdirectory

-h:服务器地址

-d:需要恢复的数据库实例

--dir:备份数据所在位置


聚合命令

聚合是基于数据处理的聚合管道,每个文档通过一个由多个阶段组成的管道,可以对每个阶段的管道进行分组,过滤等功能,然后经过一系列的处理,输出相应的结果

db.集合名称.aggregate({管道:{表达式}})

常用管道命令

1.$group:将集合中的文档分组,可用于统计结果

注意:1.$group对应的字典中有几个键,结果中就有几个键

2.分组依据需要放到'_id'后面

3.取不同的字段的值需要使用$,如'$age'

4.取字典嵌套的字典中的值的时候’$_id.country‘

5.能够同时按照多个键进行分组’{$grop:{_id:{country:'$country',province:'$province'}}}‘

结果是’{_id:{country:'',province:''}}‘

按照gender进行分组,获取不同数据的个数和平均年龄

db.stu.aggregate({$group:{_id:'$gender',count:{$sum:1},avg_age:{$avg:'$age'}}})

使用$group统计整个文档

db.stu.aggregate({$group:{_id:null,count:{$sum:1},mean_age:{$avg:'age'}}})

2.$match:过滤数据,只输出符合条件的文档


3.$project:修改输入文档的结构,如重命名,增加,删除字段,创建计算结果



db.stu.aggregate({$group:{_id:null,count:{$sum:1},mean_age:{$avg:'age'}}},{$project:{gender:'%_id',count:1,'avg_age':1,_id:0}})

4.$sort:将输入文档排序后输出

例如:查询男生,女生人数,并且按照降序排序

db.stu.aggregate{{$group:{_id:'$gender',counter:{$sum:1}}},{$sort:{counter:-1}}}

5.$limit:限制聚合管道返回的文档数

6.$skip:跳过指定数量的文档,并返回余下的文档

7.$unwind:将数组类型的字段进行拆分

表达式

语法:表达式:'$列名'

1.$sum:计算总和,$sum:1 表示以一倍计数

2.$avg:计算平均值

3.$min:获取最小值

4.$max:获取最大值

5.$push:在结果文档中插入值到一个数组中

6.$first:根据资源文档的排序获取第一个文档数据

7.$last:根据资源文档的排序获取最后一个文档数据

索引

语法:db.集合.ensureindex({属性:1}),1表示升序,-1表示降序

例如:db.t1.ensureindex({name:1})

在默认情况下索引字段的值可以相同

创建唯一索引(索引的值是唯一的):

db.t1.ensureIndex({'name':1},{'unique':true})

建立联合索引

db.t1.ensureIndex({name:1,age:1})

查看当前集合的所有索引:

db.t1.getIndexes()

删除索引:

db.t1.dropIndex('索引名称')

mongodb和python间交互

from pymongo import Mongoclient

client = MongoClient(host='127.0.0.1',port=27017)

collection = client['test']['t251']

插入一条数据

ret1 = collection.insert({'name':'xiaoming','age':18})

插入多条数据

data_list = [{'name':'test{}'.format(i)} for i in range(10)]

colletion.insert_many(data_list)

查询一个记录

t =collection.find_one({'name':'xiaowang'})

查询多条记录

collection.find({'name':'xiaowang'})

更新一条数据

collection.update_one({'name':'xiaowang'},{$set:{'name':'xiaohong'}})

更新全部数据

collection.update_many({'name':'xiaowang'},{'$set':{'name':'xiaohong'}})

删除一条

collection.delete_one({'name':'xiaowang'})

删除所有条件满足的数据

collection.delete_many({'name':'xiaowang'})

                

你可能感兴趣的:(MongoDB数据库的使用)