芒果数据库

MongoDB数据库常用语句

1. 数据库级常用操作

use  databaseName                                            		  # 使用库 /  创建库,不会立即创建,当需要等到插入数据时数据库才会创建
show dbs															  # 查看系统中的数据库
db.dropDatabase()                                             		  # 删除数据库

2. 集合常用操作

db.createCollection(collection_name)                                  # 创建名字为collection_name的集合
db.collection_name.insert(...)                                        # 插入文档,如集合不存在则自动创建
show collections                                                      # 查看库中的集合
show tables
db.collection.drop()                                                  # 删除集合
db.collection.renameCollection("new_name")      					  # 重命名集合

db.collection.insert()                                                # 插入文档
db.collection.save()                                                  # 插入文档  
db.class0.insertOne({name:"Levi",age:20,sex:'m'})                     # 插入一条文档
db.class0.insertMany([{name:"John"},{name:"Lenzer"}]) 			      # 插入多条文档 

3. 文档常用操作

db.collection.find()                                                   #  同SQL ----> select * from  table
find(query,field)                  									   # query  查找条件,相当于where子句
																	   # field  查找的域, 0不显示,1显示
db.class0.findOne({sex:'w'},{_id:0,name:1})          				   # 查询满足条件的第一条文档

用于query的特殊操作符:
比较操作符:
$eq  等于 ==   ;         $lt  小于  < ;      	 $lte 小于等于 <=;                $in  包含
$ne  不等于  !=;  		 $gt  大于  > ;           $gte 大于等于 >=;     			 $nin 不包含

逻辑操作符:
$and     逻辑与;          $or  逻辑或;	          $not  逻辑非;                  $nor 

Array数组相关:
$all       e.g.       db.class.find({score:{$all:[49,67]}},{_id:0})        查找同时包含49  67的文档
$size  	   e.g.       db.class1.find({score:{$size:2}},{_id:0})            查找score中包含两个元素的文档
$slice     e.g. 	  db.class1.find({},{_id:0,score:{$slice:2}})          显示数组前两项

其他常用查找操作符:
$exists    e.g.       db.class1.find({sex:{$exists:false}},{_id:0})        查找不存在sex域的文档,true:存在,false:不存在
$mod 	   e.g.   	  db.class1.find({age:{$mod:[2,1]}},{_id:0})		   找出年龄为单数的文档
$type  	   e.g.		  db.class1.find({name:{$type:2}},{_id:0})             查找name域值类型为2的文档

查找结果的操作函数:
distinct(filed) 	  db.class0.distinct('age')							获取某个域的值,去重
pretty()			  db.class0.find().pretty()							格式化显示查询结果
limit(n)			  db.class0.find({},{_id:0}).limit(3)   			显示查询结果前三条
skip(n)				  db.class0.find({},{_id:0}).skip(5)				跳过前5条文档,显示后面的查询结果
count()				  db.class0.find({sex:'w'},{_id:0}).count()			统计性别为w的文档个数
sort({field: 1/-1})   db.class0.find({},{_id:0}).sort({age:-1})		    查找结果按照降序排序	

remove(query,justOne)		db.class1.remove({sex:{$exists:false}})     删除所有不存在sex域的文档
  justOne=true				db.class1.remove({sex:'w'},true)            删除第一条性别为w的文档     
							db.class1.remove({})						删除class1中所有文档

update(query,update,upsert,multi)      	query  筛选条件  用法同find
       									update  要修改成什么内容 通常配合修改操作符(修改器)使用
	    								upsert  布尔值,默认是false  如果query没有筛选到文档则不做任何操作
                								如果设置为true 则如果query没有筛选到匹配文档则根据query和update内容插入新的文档
	    								multi   布尔值 默认false 表示如果有多条符合条件文档则只修改第一条
	             								如果设置为true则表示修改所有符合条件文档
db.class0.update({name:'Tom'},{$set:{age:18}})  将Tom的年龄修改为18

修改器:
$set      e.g.   	  db.class0.update({name:'Lily'},{$set:{age:17}})   		    Lily年龄修改为17
$unset    e.g.        db.class0.update({name:'Abby'},{$unset:{sex:''}})  			删除Abby的sex域,sex后为空字符串
$rename   e.g.        db.class0.update({},{$rename:{sex:'gender'}},false,true)      将sex域名改为gender
$setOnInsert	e.g. 	
$inc 	  e.g. 		  db.class0.update({},{$inc:{age:1}},false,true)                所有人年龄加1
$mul	  e.g.		  db.class0.update({},{$mul:{age:0.5}},false,true)			    所有人年龄乘以0.5
$min	  e.g.        db.class0.update({name:'Levi'},{$min:{age:20}})				Levi age如果大于20则修改为20
$max      e.g.        db.class0.update({name:'Lenzer'},{$max:{age:19}})             如果Lenzer age 小于19则改为19

数组修改器:
$push		e.g.      db.class1.update({name:'小红'},{$push:{score:91}})   	 					给小红 score数组中添加一项91
$pushAll 	e.g.	  db.class1.update({name:'小乔'},{$pushAll:{score:[94,10]}})					给小乔 score数组中添加多项
$pull		e.g. 	  db.class1.update({name:'小红'},{$pull:{score:78}})							从小红 score数组中删除一项78
$pullAll	e.g.      db.class1.update({name:'小乔'},{$pullAll:{score:[92,10]}})					从小乔 score数组中删除多项
$each		e.g.	  db.class1.update({name:'小乔'},{$push:{score:{$each:[99,10]}}})   			分别插入99  10
$position	e.g. 	  db.class1.update({name:'小明'},{$push:{score:{$each:[67],$position:1}}})	将67 插入到数组1号位置
$sort		e.g. 	  db.class1.update({},{$push:{score:{$each:[],$sort:-1}}},false,true)  		将所有score域的数组降序排序
$pop		e.g. 	  db.class1.update({name:'小明'},{$pop:{score:-1}})							删除小明score中第一项,1:最后一项,-1:第一项
$addToSet	e.g. 	  db.class1.update({name:'小刚'},{$addToSet:{score:81}})						如果数组中没有81 则添加81

时间数据类型

#  mongo中存储时间大多为 ISODate
new Date()		e.g.		db.class2.insert({book:'Python入门',date:new Date()})		自动生成当前时间
ISODate()		e.g.		db.class2.insert({book:'Python精通',date:ISODate()})			自动生成当前时间
							db.class2.insert({book:'Python崩溃',date:ISODate("2018-07-01 11:15:56")}    指定时间
Date()			e.g.		db.class2.insert({book:'Python疯狂',date:Date()})			将系统时间转换为字符串
valueOf()    	e.g.		db.class2.insert({book:'Python涅槃',date:ISODate().valueOf()})		获取当前标准时间时间戳

4.索引

db.class0.ensureIndex({name:1})		   						 根据name域创建索引(1:正序索引,-1:逆序索引)
db.class0.ensureIndex({age:1},{name:'ageIndex'})     		 对age域创建索引命名ageIndex
db.collection.getIndexes()                           		 查看集合中索引 
db.class0.dropIndex({name:1})								 删除索引,根据键值对
db.class0.dropIndex('ageIndex')								 删除索引,根据索引名
db.collection.dropIndexes()									 删除所有索引

索引类型:
db.class0.ensureIndex({name:1,age:-1},{name:'name_age'})					复合索引
db.class0.ensureIndex({name:1},{unique:true})                   			唯一索引
db.class0.ensureIndex({age:1},{sparse:true})								稀疏索引(间隙索引) 只对有age域的文档创建索引

5.聚合操作

db.collection.aggregate()                                                          # 聚合条件 ---》 聚合操作符
db.class0.aggregate({$group:{_id:'$gender',num:{$sum:'$age'}}})                    # $group   分组聚合  需要配合具体的分组统计选项  $sum  : 求和
																				   # $avg : 求平均数, $max  求最大值,$min  求最小值
db.class0.aggregate({$project:{_id:0,name:1,age:1}})                               # $project 修改文档的显示效果
db.class0.aggregate({$match:{age:{$gt:18}}})                                       # $match 数据筛选   过滤年龄大于18岁的数据文档
db.class0.aggregate({$limit:3})                                                    # $limit  筛选前几条文档
db.class0.aggregate({$skip:3})                                                     # $skip 跳过几条文档显示
db.class0.aggregate({$sort:{age:1}})                                               # 将数据排序

聚合管道:   将上一个聚合的操作结果给下一个聚合继续操作
db.collection.aggregate([{聚合},{},{}...])
db.class0.aggregate([{$match:{gender:'m'}},{$project:{_id:0}},{$sort:{age:1}}])        # match --> project --> sort

6.固定集合

mongodb中可以创建大小固定的集合,称之为固定集合
特点: 能够淘汰早期数据
             插入和顺序查找速度更快
             可以控制集合的空间大小

使用: 临时缓冲
             日志处理

db.createColleciton(collection,{capped:true,size:10000,max:1000})                   # capped:true  表示创建固定集合
																					# size: 表示指定集合的大小字节
																					# max: 指定集合存放文档上限

7. pymongo

安装: sudo pip3 install pymongo

conn = pymongo.MongoClient('localhost',27017)                                     # 1.创建数据库连接对象
db = conn.stu                                           			              # 2.生成数据库对象
myset = db.class0                              									  # 3.生成集合对象
																				  # 4. 集合操作 (增删改查索引聚合)
conn.close()                                                           			  # 关闭数据库连接																		 

增:insert()    insert_many()     insert_one()     save()
查:find()     find_one()     
改:update(query,update,upsert=False,multi=False)          update_many()     update_one()
删:remove(query,multi = True)

cursor = db.class0.find()
cursor.hasNext()    # 查看是否有下一个结果
cursor.next()    # 获取下一个结果

游标 cursor 属性: next()    limit()   skip()    count()     sort()

数据库的备份和恢复

备份 mongodump -h host -d dbname -o bak
恢复 mongorestore -h dbhost:port -d dbname path

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无尽渊源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值