mysql是常用的关系型数据库,而非关系型数据库常用的就是mongodb和redis了
所谓nosql,并不是没有sql,而是not only sql
本文主要讲解mongodb的基本用法,数据操作。最后会用一个实例来讲解如何和python进行交互
数据库操作
1.查看当前数据库名称
db
2.查看所有数据库
show dbs
3.切换数据库(如果不存在,则指向数据库,知道插入数据或创建集合时数据库才被创建)
use xx
默认数据库为test
4.删除数据库
db.dropDatabase()
集合操作
1.创建
db.createCollection(“stu”)
参数capped:默认为false,表示不设置上限
参数size:当capped为true时,需要指定此参数,表示上限大小。当文档达到上限时,会将之前的数据覆盖,单位为字节
db.createCollection(“stu”,{capped::true,size:10})
2.删除
db.xxx.drop()
3.查看
show collections
数据操作
mongodb常见数据类型
ObjectID文档id
String 字符串
Boolean 布尔
Integer 整数
Double 浮点
Arrays 数组或列表
Object 用于嵌入式文档,即一个值为一个文档
Null 存储null值
Timestamp 时间戳
Date 存储当前日期或时间的UNIX时间格式
1.插入
db.集合名.insert(document)
2.查询
db.集合名.find()
db.集合名.findOne() 只返回一个数据
db.集合名.find().pretty() 将结果格式化
3.更新
db.集合名.update(
,
,
{multi:} #multi:true时 可以修改多条
)
改变结构
db.stu.update({},{name:’wushuai1’})
KaTeX parse error: Expected '}', got 'EOF' at end of input: …stu.update({},{set:{name:’wushuai1’}})
4.删除
db.集合名.remove(
,
{
justOne:
}
)
运算符
1,比较运算符
$lt 小于 $gt 大于
$lte 小于等于 $gte 大于等于
KaTeX parse error: Expected '}', got 'EOF' at end of input: …stu.find({age:{gte:18}}) 查询年龄大于等于18
2,逻辑运算符
逻辑与 , db.stu.find({age:18,name:’wu’})
逻辑或 ordb.stu.find(or db.stu.find(ordb.stu.find(or:[{age:18},{name:’wu’}])
3,范围运算符
in,in,in,nin
db.stu.find({age:{$in:[18,20]}}) 查询年龄18-20的
自定义查询
db.stu.find({$where:
function(){return this.age>20}
})
Limit 读取指定数量文档
db.stu.find().limit(x)
skip跳过制定数量文档
db.stu.find().skip(x)
投影
需要显示的字段设为1,不需要显示的设为0
db.stu.find({},{name:1,age:0})
排序sort
1为升序排列,-1为降序排列
db.stu.find().sort({age:1,gender:-1})
统计个数count
db.stu.find().count()
消除重复distinct
db.stu.find().distinct(‘去重字段’,{条件})
聚合aggregate
用于计算数据,类似于sum(),avg()
db.stu.aggregate([{管道:{表达式}}])
表达式:’$列名’
$$ROOT 得到整个文档
例:
group
1.统计男女人数
db.stu.aggregate([
{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:’gender’,counter:{KaTeX parse error: Expected 'EOF', got '}' at position 6: sum:1}̲}}
])
#按gender分…group:{_id:’null’,counter:{$sum:1}}}
])
match
3.查询年龄大于20的学生
db.stu.aggregate([
{KaTeX parse error: Expected '}', got 'EOF' at end of input: match:{age:{gt:20}}}, #过滤之后,再分组统计人数
{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:’gender’,counter:{sum:1}}
])
Project
4.查询学生的姓名年龄
db.stu.aggregate([
{$project:{_id:0,name:1,age:1}}
])
db.stu.aggregate([
{KaTeX parse error: Expected '}', got 'EOF' at end of input: match:{age:{gt:20}}},
{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:’gender’,counter:{sum:1}},
{$project:{_id:0,counter:1}}
])
sort
5.按年龄升序排列
db.stu.aggregate([
{$sort:{age:1}}
])
unwind
6.db.stu.aggregate([
{unwind:’unwind:’unwind:’size’} #size=[1,3,4,5]
])
将数组拆分
db.stu.aggregate([
{KaTeX parse error: Expected '}', got 'EOF' at end of input: unwind:
{path:’size’,preserveNullAndEmptyArrays:true} #true防止数据丢失
} ])
索引
查询性能分析
db.t1.find({name:‘test24’}).explain(‘executionStats’)
建立唯一索引 1升序 -1降序
db.t1.ensureIndex({“name”:1},{“unique”:true})
联合索引
db.t1.ensureIndex({name:1,age:1})
查看索引
db.t1.getIndexes()
与python交互
#coding=utf-8
from pymongo import *
client = MongoClient('mongodb://stu:123@localhost:27017/stu') #获得客户端,建立连接
db = client.stu#切换数据库
stu = db.stu#获取集合
#stu.insert_one({'name':'xxx'}) #插入
#stu.update_one({'name':'xxx'},{'$set':{'name':'xxx的小LL'}}) #修改
#stu.delete_one({'name':'li'}) #删除
#stu.delete_many() #删除
# cursor = stu.find({'age':{'$lt':20}}) #查找
# for i in cursor:
# print(i['name'])
cursor = stu.find().sort('age',DESCENDING) # 排序DESCENDING ASCENDING
for i in cursor:
print(i)