mongodb 数据库

1.mongodb是一个基于分布式存储的数据库。由c++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

2.优势

  易扩展:
  大数据量,高性能
  灵活的数据模型
3.服务端mongodb的启动:

  启动:sudo service mongod start
  停止:sudo service mongod stop
  重启:sudo service mongod restart
  查看是否启动成功:ps ajx|grep mongod
  配置文件的位置:/etc/mongod.conf
  默认端口:27017
  日志的位置:/var/log/mongodb/mongod.log
  客户端mongo

4.启动本地客户端:mongo
  查看帮助:mongo --help
  退出:exit ctrl+c
5.基础命令:

  查看当前的数据库: db
  查看所有的数据库:show dbs/show databases
  查看当前数据库信息:db.stats()
  切换数据库: use db_name
  删除当前的数据库: db.dropDatabses()

6.不手动创建集合:

  向不存在的集合中第一次加入数据时,集合会被创建出来


7.手动创建集合:

  db.createCollection('sub',{capped:true,size:10})
  参数capped:默认值为false表示不设置上限,值为true表示设置上限
  参数size:当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节。
 查看集合: show collections

 查看集合中的元素:db.集合名称.find()

 删除集合:db.集合名称.drop()

添加:

db.集合名称.insert(document)

db.student.insert({
'sname':'zhangsan',
'age':20,
'addr':'baoshengli'
})

更新:

db.集合名称.update(<quary>,<update>,{multi:<boolean>})
db.student.update({sname:'caocao'},{$set:{sname:'caozhi'}})
删除:

db.集合名称.remove(<query>,)
db.student.remove({sname:'zhangsan'})
保存:

db.集合名称.save(document)
如果文档的_id已经存在则修改,如果文档的_id不存在则添加
db.stu.save({_id:'20160102','name':'yk',gender:1})

 二、数据查询

基本查询:

  方法find():查询

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

  方法findOne():查询,只返回第一个

  db.集合名称.findOne({条件文档})

  方法pretty():将结果格式化

  db.集合名称.find({条件文档}).pretty()

比较运算符:

  等于,默认是等于判断,没有运算符

  小于:$lt

  小于或等于:$lte

  大于:$gt

  大于或等于:$gte

  不等于:$ne

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

逻辑运算符

  逻辑与:默认是逻辑与的关系

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

逻辑或:使用$or

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

and和or一起使用

db.stu.find({$or:[{age:{$gte:18}},{gender:1}],name:'gj'})

范围运算符:

使用"$in","$nin" 判断是否在某个范围内
db.stu.find({age:{$in:[18,28]}})
使用正则表达式

使用//或$regex编写正则表达式
db.stu.find({name:/^黄/})
db.stu.find({name:{$regex:'^黄'}}})

自定义查询:

使用$where后面写一个函数,返回满足条件的数据

查询年龄大于30的学生

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

$type的使用--查询指定类型

db.student.find({friends:{$type:'array'}})

limit:

方法limit():用于读取指定数量的文档

db.集合名称.find().limit(number)

查询2条学生信息

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

skip:

方法skip():用于跳过指定数量的文档

db.集合名称.find().skip(NUMBER)

查询从第3条开始的学生信息

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

一起使用limit和skip

查询第5至8条数据
db.stu.find().limit(4).skip(5)
db.stu.find().skip(5).limit(4)

投影:

在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段

对于需要显示的字段,设置为1即可,不设置即为不显示

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

对于_id列默认是显示的,如果不显示需要明确设置为0

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

排序:

方法sort(),用于对结果集进行排序

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

参数1为升序排列

参数-1为降序排列

根据性别降序,再根据年龄升序

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

统计个数

方法count()用于统计结果集中文档条数

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

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

统计男生人数

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

统计年龄大于20的男生人数

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

消除重复

方法distinct()对数据进行去重

db.集合名称.distinct('去重字段',{条件})

查找年龄大于18的性别(去重)

db.stu.distinct('gender',{age:{$gt:18}})

 

三,聚合aggregate

- 聚合主要用于计算数据,类似sql中的sum(),avg()
- db.集合名称.aggregate([{管道:{表达式}}])

- 常用管道
- $group:将集合中的文档分组,可用于统计结果
- $match:过滤数据,只输出符合条件的文档
- $project:修改输入文档的结构,如:重命名、增加、删除字段
- $sort :将输入文档排序后输出
- $limit :限制聚合管道返回的文档数
- $skip:跳过指定数量的文档,并返回余下的文档
- $unwimd:将数组类型的字段进行拆分

- 表达式
- $sum:计算总和
- $avg:计算平均值
- $min:获取最小值
- $max:获取最大值
- $push:在结果文档中插入值到一个数组中
- $first:根据资源文档的排序获取第一个文档数据
- $last:根据资源文档的排序获取最后一个文档数据

 $group的注意点:

- $group对应的字典中有几个键,结果中就有几个键
- 分组依据需要放到`_id`后面
- 取不同的字段的值需要使用`$`, `$gender`, `$age`

- db.stu.aggregate(
{$group:{_id:"gender",count:{$sum:1}}}
)

- 按照gender进行分组,获取不同数据的个数和平均年龄
- db.stu.aggregate(
{$group:{_id:"gender",count:{$sum:1},avg_age:{$avg:"age"}}},
{$project:{gender:"$_id",count:1,avg_age:"$avg_age",_id:0}}
)

- 按照hometown进行分组,获取不同组的平均年龄
- db.stu.aggregate(
{$group:{_id:"hometown",mean_age:{$avg:"$age"}}}
)

- 按照$group统计整个文档
- db.stu.aggregate(
{$group:{_id:null,count:{$sum:1},mean_age:{$avg:"$age"}}}
)

 

五、索引

- 在默认情况下索引字段的值可以相同
- 创建唯一索引(索引的值是唯一的)
- 查看当前集合的所有索引:db.t1.getIndexes()
- 删除索引:db.t1.dropIndex({'索引名称':1})

 mongodb 的备份与解压

- mongodump -d douban -o ./ ----备份
- mongorestore -d douban2 --dir douban ----解压

 

 六、与python的交互

- 我的:client = MongoClient('mongodb://admin:818919@127.0.0.1:27017/')
- 创建客户端链接对象
- client = MongoClient()
- print(client)
 
- 创建集合
- course=db.course

from pymongo import MongoClient
 
client = MongoClient('mongodb://admin:818919@127.0.0.1:27017/')
print(client)
 
db = client.mydb
print(db)
course = db.course
 
 添加
 r = course.insert({'cname': 'python', 'grade': 4})
 print(r)
 
 course_list = [{'cname':'mysql','grade':3},{'cname':'html','grade':3},{'cname':'javascript','grade':4}]
 r = course.insert(course_list)
 print(r)
 
 更新
 r = course.update({'cname': 'javascript'}, {'$set': {'grade': 3}})
 print(r)
 
 删除
 r = course.remove({'cname':'html'})
 
 查询
r = course.find().sort([('grade',1)])
print(r)
 
for data in r:
    print(data)

Key Binding Resolver
Linter
Severity     Provider     Description    Line 
Git
GitHub
Create Repository
Initialize a new project directory with a Git repository
Create repository

 

posted @ 2019-09-14 10:11  刚--  阅读(145)  评论(0编辑  收藏  举报