一、介绍
MongoBD 由 C++ 编写的,基于分布式文件存储的开源数据库系统,旨在提供可扩展的高性能的数据存储解决方案。
MongoDB 负载量的增加(需要更多的存储空间和更强的处理能力)可以通过添加分片保证服务器的性能。
MongoDB 支持丰富的查询表达式,查询指令使用 JSON 形式的格式。
MongoDB 允许在服务端使用 JavaScript 编写函数,直接执行脚本。可以把函数的定义存储在服务端,调用执行。
二、概念
数据库
一个 MongoDB 可以创建多个数据库。默认数据库为 db,该数据库存储在 data 目录中。
MongoDB 可以容纳多个单独的数据库实例,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件夹。
集合
集合就是文档组,集合存在于数据库中,没有特定的结构,
文档
文档是一个键值对(key-values)即一个 BSON,集合中的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型
文档中的
键值对(key-values)是有序的
文档中的键不允许重复
文档中的值包含多种数据类型,例如:字符串、整型、数组、文档型
文档区分大小写
三、使用
=========================================================
显示所有数据库
show dbs
---------------------------------------------------------
切换数据库(选中数据库)
use 数据库
---------------------------------------------------------
显示所有集合
show collections
---------------------------------------------------------
创建集合
db.createCollection("集合名")
---------------------------------------------------------
查询
# 查询指定集合所有数据
db.集合名.find()
# and 条件查询
db.集合名.find({name:"yangfan"})
# or 条件查询
db.集合名.find({$or:[{age:15},{age:18}]})
# and 和 or 同时使用
db.集合名.find({$or:[{name:"yangfan",age:15},{name:"yangfan",age:18}]})
# 大于
db.集合名.find({age:{$gt:16}})
# 小于
db.集合名.find({age:{$lt:16}})
# 大于等于
db.集合名.find({age:{$gte:16}})
# 小于等于
db.集合名.find({age:{$lte:16}})
# 不等于
db.集合名.find({age:{$ne:16}})
# 查询 3 条记录
db.集合名.find().limit(3)
# 跳过 3 条记录(从第 4 条开始)
db.集合名.find().skip(3)
# 排序(注意:1 正序、-1 倒序)
db.集合名.find().sort({age:-1})
---------------------------------------------------------
聚合函数
# 计数
db.集合名.count()
# 条件计数
db.集合名.count({age:18})
# 平均数(注意:_id : "分组字段")
db.集合名.aggregate({$group:{_id:"$name",avg:{$avg:"$age"}}})
# 求和
db.集合名.aggregate({$group:{_id:"$name",avg:{$sum:"$age"}}})
# 最大数
db.集合名.aggregate({$group:{_id:"$name",avg:{$max:"$age"}}})
# 最小数
db.集合名.aggregate({$group:{_id:"$name",avg:{$min:"$age"}}})
---------------------------------------------------------
添加
# 添加
db.集合名.insert({name:"yangfan",age:16})
db.集合名.save({name:"yangfan",age:16})
---------------------------------------------------------
删除
# 单条件删除
db.集合名.remove({name:"yangf"})
# 多条件删除
db.集合名.remove({name:"yangfan",age:17})
---------------------------------------------------------
修改
# 单条件修改单记录(相同数据只修改一条)
db.集合名.update({name:"yangfan"},{$set:{age:20}})
# 多条件修改多记录(相同数据只修改一条)
db.集合名.update({age:201,name:"yangfan"},{$set:{age:20,name:"yang"}})
# 单条件修改单记录(相同数据修改所有)
db.集合名.update({name:"yangfan"},{$set:{age:21}},{multi:"true"})
---------------------------------------------------------
# 创建索引(阻塞)
db.testCollections.ensureIndex({name:1})
# 后台创建索引(非阻塞)
db.testCollections.ensureIndex({name:1},{background:true})
=========================================================