mongoDb个人理解

mongoDb和mysql的对应关系

在这里插入图片描述

1、mongoDb安装

参考window平台安装教程

//将mongoDb添加到服务里面(设置成手动开启)
mongod --dbpath "D:\mongoDb\data\db" --logpath "D:\mongoDb\data\log\mongo.log" -install -serviceName "MongoDB"

//启动命令
net start mongodb

//运行
http://127.0.0.1:27017/


(常规终端启动:[不用管])
#fork 后台运行  若要使用账号密码服务 需要在启动时加 --auth
mongod --dbpath D:\mongoDb\data\db --logpath D:\mongoDb\data\log\mongo.log --fork
#不在后端运行,可以在控制台上查看运行过程,使用配置文件启动
mongod --config D:\mongoDb\config\mongod.conf

2、常用命令

1、(原生)基础命令

1.1、数据库、集合

//查看数据库
show databses / show dbs

// 选择(创建)数据库
use database[数据库名称]   选择不存在的数据库会隐式创建该数据库

//删除数据库
先选择到要删除的数据库(use) 然后:db.dropDatabase()

// 创建集合
db.createCollection('c1')

// 查看集合
show collections

// 删除集合
db.集合名.drop()

1.2 、文档基本curd

1.2.1 增加
留心一:数据库和集合不存在时,都隐式创建
留心二:对象的键同意不加引号方便看,但是查看集合数据时系统会自动加上
留心三:mongodn会给每条数据添加一个全球唯一的ID

db.c1.insertMany({})   //插入一条
db.c1.insert([{username:"z3",age:3{username:"z4",age:4}])  //插入多条
1.2.2 查询
语法: db.集合名.find(条件,[查询的列])  【写法见下】
格式化:db.集合名.find().pretty()

条件(例子):
	查询所有数据  			{}或者不写
	查询age=6的数据 			{age:6}
	查询age=6且性别为男   	{age:6,sex:'男'}

查询的列(例子):
	不写 					- 查询全部的列
	{age:1} 				只显示age列,可以显示多个想要的列{user:1,age:1.......} 
	{age:0} 				除了age列外都显示 可以不显示多个想要的列{user:0,age:0}
	【tip】: 无论怎么写系统自定义_id都会在

/ ** 进阶写法 ** /
/**
	常用运算符   
| 运算符  | 作用    |
| ------ | --------|
| $gt    | 大于     |
| $gte   | 大于等于 |
| $lt    | 小于     |
| $lte   | 小于等于 |
| $ne    | 不等于   |
| $in    | in       |
| $nin   | Not in   |
**/
db.集合名.find({键:{运算符:值}})

//年龄小于5的
db.c1.find({age:{$lt:5}})

//年龄等于3、4、5的
db.c1.find({age:{$in:[3,4,5]}})
1.2.3、更新
//注:默认只修改第一条数据,多条修改需要加其他参数
基础语法: db.集合名.update(条件,新数据,{是否新增,是否修改多条})
例子:
db.users.update(
  { "name": "张三" },        // 条件:找到"name"为"张三"的文档
  { $set: { "age": 29 } },   // 新数据:更新"age"为29
  { upsert: false, multi: false } // 不新增文档,不修改多条记录
);

/ ** 覆盖更新 ** /
db.集合名.update(条件,数据)
//该文档除了likenum字段其他字段都不见了
例子:db.comment.update({_id:"1"},{likenum:NumberInt(1001)})


/ ** 局部修改($set) ** /
//只把zs2的username更新成 zs222
db.c3.update({username:"zs2"}{$set:{username:"zs222"}}/ ** 加减更新 ($inc) ** /
//给zs10 增加2岁
db.c3.update({username:"zs10"},{$inc:{age:2}})
//给zs10 减少2岁
db.c3.update({username:"zs10"},{$inc:{age:-2}}) 


/**
		运算符
| 运算符  | 作用     |
| ------- | --------|
| $inc​    | 递增    |
| $rename | 重命名列 |
| $set    | 修改列值 |
| $unset  | 删除列   |
**/


/ ** 进阶例子 **/
//将 熊子阳 改为 Aoi  ,age 改为999 ,who 改为 sex ,other 删除
db.c4.update({username:"熊子阳"},{
	$set:{username:"Aoi"},
	$inc:{age:971},
	$rename:{who:"sex"},
	$unset:{other:true}
}) 
1.2.4、删除
语法:db.集合名.remove(条件,是否删除一条)

//users集合中删除名字为"张三"的第一个匹配的文档
db.users.remove({"name": "张三"}, true)
1.2.5、排序 & 分页
/ **  排序 ** /
语法:db.集合名.find().sort(JSON数据)
说明:键 - 就是要排序的列/字段, 值:1升序 -1降序

//使用:对年龄进行降序排序
db.c2.find().sort({age:-1})

/ ** 分页 ** /
语法:db.集合名.find().skip(数字).limit(数字)
说明:skip里的数字指跳过指定数量(可选),limit限制查询的数量

//使用
db.c2.find().sort({age:-1}).skip(1).limit(2)
1.2.6、条件连接查询
语法:$and:[{},{},{}]
	 $or:[{},{},{}]

//使用:查询集合中userid为1003或者点赞数小于1000的文档记录
db.comment.find({$or:[{userid:"1003"},{likenum:{$lt:1000}}]})
1.2.6、聚合查询(重要)
//注意mongodb要实现所有数据的某个字段的累加字段都要进行分组来处理
db.collection.aggregate{
  [
    {$group:{_id:"$分组键名"}, "$分组键名", 别名:{聚合运算: "$运算列"} }{条件筛选:{键名:{运算条件:运算值}}}
  ]
}

//使用1:计算orders集合所有文档price的总和
db.orders.aggregate([
  {
    $group: {
      _id: null,
      total_price: { $sum: "$price"}
    }
  }
])

//使用2:对于每一个唯一的cust_id,计算price总和
db.orders.aggregate([
  {
    $group: {
      _id: '$cust_id',
      total_price: { $sum: "$price"}
    }
  }
])

//使用3:查询男生女生人数,升序排序
db.c3.aggregate([
	{$group:{	_id:"$sex",res:{$sum:1}}},
	{$sort:{res:1}}
])

/**
	常用的聚合函数
$sum 总和 ($sum:1同count表示统计)
$avg 平均
$min 最小值
$max 最大值
**/

1.3 索引

1.3.1 创建索引
创建索引语法: db.集合名.createIndex(待创建索引的列,额外选项)
/**
   					参数
待创建索引的列:{键:1,...,键:-1}
说明:1升序  -1降序 列入{age:1}表示创建age索引并按照升序的方式存储

额外选项:设置索引的名称或者唯一索引等等
**/

例子:
//创建只对单个列为条件的索引
db.c1.create({name:1})
//创建一个自己取名的索引
db.c1.create({name:1},{name:"xzy"})
//创建条件为多个列的组合索引
db.c1.create({name:1,age:-1},{name:"hh"})

//创建唯一索引
db.c1.createIndex({name:1},{unique:"name"})

/**
   		额外选项
unique:建立的索引是否唯一
name: 索引的名称(未指定的话,根据字段名和排序顺序生成一个索引名称)
**/
1.3.2 删除索引
全部删除:db.集合名.dropIndexes()

删除指定:db.集合名.dropIndex(索引名)
1.3.3 查看索引
查看索引语法:db.集合名.getIndexes()
1.3.4 分析索引(执行计划)
语法:db.集合名.find().explain()

/**
		使用索引状态的说明
COLLSCAN - 全表扫描
IXSCAN - 索引扫描
FETCH - 根据索引去检索指定document 
**/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值