mongodb 数据库

Posted rungang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于mongodb 数据库的主要内容,如果未能解决你的问题,请参考以下文章

mongodb数据库修复 mongodb数据库丢失恢复 mongodb数据库数据恢复 mongodb数据库文件0kb数据恢复

MongoDB数据库系列MongoDB基础

图解MongoDB数据库学习路线指南 #yyds干货盘点#

Mongodb数据库

Mongodb数据库

MongoDB 数据库:MongoDB的介绍与安装