安装(Linux系统下)
- 导入软件源的公钥:
- sudo apt-key adv –keyserver hkp://keyserver.ubuntu.com:80 –recv EA312927
创建软件源:
- echo “deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list
更新并安装软件:
- sudo apt-get update
- sudo apt-get install -y mongodb-org
- sudo apt-get install mongodb
启动:
- sudo service mongodb start
专有名词
- database:数据库
- collection:数据库表/集合
- document:数据记录行/文档
- field:数据字段/域
- index:索引
- primary_key:MongoDB自动将_id字段设置为主键
三元素
- 数据库
- 一个集合的物理容器,一个数据库可以包含多个文档
- 集合
- 类似关系型数据库(SQL)中的表,储存多个文档,且结构不固定
- 文档
- 一个对象,由键值对构成,是json的扩展形式
demo:{“name”:”小明”,”gender”:”男”}
- 一个对象,由键值对构成,是json的扩展形式
- mongodb菜鸟学习教程
服务器与客户端常用命令
- 服务器
- 启动:sudo service mongod start
- 停止:sudo service mongod stop
- 重启:sudo service mongod restart
- 客户端
- mongo
基本操作
数据库
- 查看当前数据库:db
- 查看所有数据库:show dbs
- 切换数据库:use 数据库名
- 若没有,则自动创建
- 删除当前指向数据库:db.dropDatabase()
集合
增删改
- 创建:db.createCollection(集合名)
- 可以不创建,插入时自动创建
- 默认不限制集合大小
- 限制:db.createCollection(“name”, {capped:true, size:100})
- 集合名为name,限制大小,限制后,达到大小后,会覆盖
- 查看:show collections
- 删除:db.集合名.drop()
- 插入:db.集合名称.insert(document)
- 更新:db.集合名称.update({选择更新值},{更新为},{multi:true})
- multi:默认为false,只更新匹配的一条,若为true,更新匹配多条
- multi:修改多条,只对于’$’有效
- 指定属性更新,通过’$set’
db.practice.update({"name":"小明"},{$set:{"name":"小红"}},{multi:true})
- 保存:db.集合名称.save(document)
- 删除
- 指定删除:db.集合名称.remove(<删除条件>,{justone:})
- justone:默认为false,删除多条,设置为true,删除一条
- 全部删除:db.集合名称.remove()
- 指定删除:db.集合名称.remove(<删除条件>,{justone:})
查询
- 基本查询
- db.集合名.find(条件文档)
- 查找一条:db.集合名.findOne(条件文档)
- 格式化输入:db.集合名.find().pretty()
- 比较查询
- 比较运算符
- 大于:$gt
- 小于:$lt
- 大于等于:$gte
- 不等于:$ne
- 逻辑运算符
- 与:默认为与
- 逻辑或:$or
- 范围运算符
- $in
- $nin
- 自定义查询
- where后跟js代码,写明查询条件
- 支持正则
- 使用//或$regex编写正则表达式
- 比较运算符
demo(查询年龄大于30的人):db.staff.find({age:{$gt:30}})
查询年龄大于30且性别为男:db.staff.find({age:{$gt:30}},{gender:true})
查询年龄大于30或性别为女:db.staff.find({$or[{age:{$gt:30}},{gender:true}]})
查询年龄在20-40的员工:db.staff.find({age:{$in:[20,40]}})
查询姓王的员工:db.staff.find({name:{$regex:'^黄'}})
- 限制与跳跃
- limit():读取指定数量文档
- skip():用于跳过指定数量文档
查询第5至8条数据:db.staff.find().limit(4).skip(5)
- 投影:设置选择字段
- 1为显示,0为不显示
只显示名字和年龄:db.staff.find({},{"name":1,"age":1})
- 排序:sort()
- 1:升序
- -1:降序:从大到小
根据性别降序、再根据年龄升序:db.staff.sort({gender:-1, age:1})
- 统计个数:count()
- db.集合名称.find(条件).count()或db.集合名.count({条件})
- 消除重复
- db.集合名.distinct(“去重字段”,{条件})
查找员工年龄大于18,来自哪些省份:db.stu.distinct('hometown',{age:{$gt:18}})
- 聚合(aggregate)
- 用于计算数据
- 语法:db.集合名.aggregate(管道:{表达式})
- 常用管道:
- $group:将集合中的文档分组,可用于统计结果
- $match:过滤数据,只输出符合条件的文档
- $project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
- $sort:将输入文档排序后输出
- $limit:限制聚合管道返回的文档数
- $skip:跳过指定数量的文档,并返回余下的文档
- $unwind:将数组类型的字段进行拆分
- 常用表达式
- sum:计算总和, sum:1 表示以一倍计数
- $avg:计算平均值
- $min:获取最小值
- $max:获取最大值
- $push:在结果文档中插入值到一个数组中
- $first:根据资源文档的排序获取第一个文档数据
- $last:根据资源文档的排序获取最后一个文档数据
聚合方法教程