目录
(4). $set $inc $unset组合使用 自增删除和修改
(5). $push给指定属性数组添加成员,$each一次添加多成员
1. 查看版本号
db.version() 
2. 查看所有数据库
show dbs 
3. 查看当前数据库目录下的所有表
show collections 
4. 选择数据库
(1). 这里我选择的是UserName数据库
(2). 数据不存在并不会报错,它会记录到内存,如果你使用增加数据操作,这个数据库就会被创建出来
(3). 如果执行别的命令前,你没有进行增加数据操作,那这个内存就会被释放掉
use UserName 
5. 创建表
| createCollection参数 | 默认值 | 
| 表名 | 无 | 
db.createCollection("students") 
6. 删除表
db.students.drop() 
7.插入数据
| insert参数 | 默认值 | 
| JOSN数组或单个JSON | 无 | 
如果这个表不存则会自动创建
 db.students.insert({name:"张三",age:18,gender:"男"}) 
db.students.insert([{name:"王五",age:15,gender:"男"},{name:"李四",age:19,gender:"男"}]) 
8. 删除表数据
| 删除一条数据并返回对象 | findOneAndDelete参数 | 默认值 | 
| 1.删除条件 | 无 | 
| 只能删除一条数据 | deleteOne参数 | 默认值 | 
| 1.删除条件 | 无 | 
| 删除多条数据 | deleteMany参数 | 默认值 | 
| 1.删除条件 | 无 | 
| remove参数 | 默认值 | 
| 1.删除条件 | 无 | 
| 2.是否只删除一个 | false | 
为{}表示清空表里的全部数据
db.students.remove({}) 
删除表内全部name为张三的数据
db.students.remove({"name":"张三"}) 
删除指定id数据
 db.students.remove({_id:ObjectId("6208af4dd5f0203f271bb2fa")}) 
 
9. 查询表一条数据
| findOne参数 | 默认值 | 
| 查询条件 | 无 | 
db.students.findOne() 
10. 查询表所有数据
| find参数 | 默认值 | 
| 查询条件 | 无 | 
db.students.find() 
11. 指定位置查询表指定数量数据
(1). db.students.find().skip(2)
(2). dskip(2)里放开始的位置,也就是从第三条数据开始查询
(3).limit(5)取出多少条数据,这里就是取出五条数据
db.students.find().skip(2) 
db.students.find().skip(2).limit(5) 
12.查询表 条件显示数据
(1). db.表名.find()
(2). 第一个查询条件{},空表示显示所有数据
(3). 第二个显示条件{age:1},0不显示,1显示,逗号分隔条件
(4). 这条命令就是,全部数据只显示age数据,如果显示条件为0则只会显示除了age数据外的全部数据
db.students.find({},{age:1}) 
13. 条件查询表数据
(1). db.表名.find()
(2). 第一个查询条件{},空表示显示所有数据,逗号分隔开
(3). 查询name为张三的全部数据
(4). 查询name为张三,age为18的全部数据
db.students.find({name:"张三"}) 
 db.students.find({name:"张三",age:18}) 
14. 模糊/正则查询表数据
(1). db.表名.find() 或者 db.表名.findOne()这个只能查询一条
(2). 查询name里面带有张的数据,/正则表达式/
db.students.find({name:/张/}) 
db.students.find({name:/^[a-z]{4}$/}) 
 
15. 运算符查询表数据
(1). db.表名.find() 或者 db.表名.findOne()这个只能查询一条
(2). 第一个查询条件{},空表示显示所有数据,逗号分隔开
(3). 条件里写Json,Json里写运算符,($and和$or)例外,下面查看案例
| 运算符 | |
| 并且 | $and | 
| 或者 | $or | 
| 大于 | $gt | 
| 小于 | $lt | 
| 不等于 | $ne | 
| 大于等于 | $gte | 
| 小于等于 | $lte | 
| 包含条件 | $in | 
| 不包含条件 | $nin | 
查询age等于15并且gender等于男的,以下两种实现方式都是一样的
db.students.find({$and:[{age:15,gender:"男"}]}) 
db.students.find({$and:[{age:15},{gender:"男"}]}) 
查询age等于15或者gender等于男的,多个Json
db.students.find({$or:[{age:15},{gender:"男"}]}) 
查询大于20的
 db.students.find({age:{$gt:20}}) 
查询大于等于20的
db.students.find({age:{$gte:20}}) 
查询小于等20的
db.students.find({age:{$lt:20}}) 
查询小于等于20的
db.students.find({age:{$lte:20}}) 
查询不等于20的
db.students.find({age:{$ne:20}}) 
查询包含20,19,15的
db.students.find({age:{$in:[20,19,15]}}) 
查询不包含20,19,15的
db.students.find({age:{$in:[20,19,15]}}) 
16. 查询表数据并排序显示
| sort参数 | 值 | |
| 排序参数 | 升序 | 1 | 
| 降序 | -1 | |
模糊查找带有张字的数据进行升序排序
db.students.find({name:/张/}).sort({age:1}) 
模糊查找带有张字的数据进行多个条件排序,多重排序!
db.students.find({name:/张/}).sort({age:1,height:-1}) 
17. 修改/删除表指定属性数据
| update参数 | 参数格式 | 默认值 | 
| 1.筛选条件 | Json格式 | 无 | 
| 2.修改的属性 | Json格式 | 无 | 
| 3.不在是否创建 | 布尔值 | false | 
| 4.是否批量修改 | 布尔值 | false | 
| 操作符 | 作用 | 
| $set | 修改 | 
| $unset | 删除 | 
| $inc | 自增 | 
| $push | 数组添加成员 | 
| $each | 配合$push添加多个成员 | 
| $pop | 弹出尾部成员 | 
| $pull | 删除指定成员 | 
(1). $set修改指定属性
这里是把name为张三的age属性改为18,不会删除其他属性
db.students.update({name:"张三"},{$set:{age:20}}) 
这里是把全部小于等于18的age属性改为18,不会删除其他属性
db.students.update({age:{$lte:18}},{$set:{age:19}},false,true) 
(2). $unset删除指定属性
这里是把name为张三的age属性删除掉,并且不删除其他属性
db.students.update({name:"张三"},{$unset:{age:19}}) 
注意加操作符$unset,不然会清空他属性
这里是把name为张三的age属性改为18,并且会把其他属性全部删除
db.students.update({name:"张三"},{age:20}) 
(3). $inc自增指定属性
操作符 $inc 使age在原来的基础上自增2
db.students.update({name:"张三"},{$inc:{age:2}}) 
(4). $set $inc $unset组合使用 自增删除和修改
$set $inc $unset 组合使用,age自增2,gender修改为女,把name属性删除了
db.students.update({name:"张三"},{$inc:{age:2},$set:{gender:"女"},$unset:{name:""}}) 
(5). $push给指定属性数组添加成员,$each一次添加多成员
操作符 $push likes数组添加了新成员
db.students.update({name:"张三"},{$push:{likes:"睡觉"}}) 
加上$each,就可以达到一次添加多个成员
db.students.update({name:"赵六六"},{$push:{likes:{$each:["睡觉","打篮球","跑步"]}}}) 
(6). $pop给指定属性数组尾部弹出一个成员
db.students.update({name:"张三"},{$pop:{likes:1}}) 
 
(6). $pull给指定属性数组删除指定成员
db.students.update({name:"张三"},{$pull:{likes:"睡觉"}}) 
18. 聚合
| aggregate操作符 | 作用 | 
| $group | 进行分布查询操作,(诸如统计平均值,求和等) | 
| $match | 通过指定属性来 匹配/过滤 | 
| $unwind | 拆分数组,把每个数组形成新的JSON数据 | 
| $project | (1只显示/0为不显示)某个属性,修改显示名 | 
| _id | 分组属性,可以为 null | 
| $sum | 类似Js里reduce()函数的累加合 | 
| $max | 求最大值 | 
| $avg | 求平均值 | 
| $push | 添加到数组 | 
| $concat | 多属性拼接字符串 | 
| 运算符 | |
| 并且 | $and | 
| 或者 | $or | 
| 大于 | $gt | 
| 小于 | $lt | 
| 不等于 | $ne | 
| 大于等于 | $gte | 
| 小于等于 | $lte | 
| 包含条件 | $in | 
| 不包含条件 | $nin | 
(1). $sum运用
这样就相当于我把每条数据里的score属性的值相加,得到总数
db.students.aggregate([
   {
   $group: {
     _id: null,
     count: {
       $sum: "$score"
     }
   }}
]) 
用cname属性进行分组,并计算每个分组的score属性总值
db.students.aggregate([
   {
   $group: {
     _id: "$cname",
     count: {
       $sum: "$score"
     }
   }}
])
 
group用cname属性的进行分组并且
math来匹配cname属性等于(一年级),并计算每个分组的score属性总值
db.students.aggregate([
    {$match: {cname:"一年级"}},
   {
   $group: {
     _id: "$cname",
     count: {
       $sum: "$score"
     }
   }}
]) 
如果match放后面需要把条件改为_id

group用cname属性分组并计算每个分组的score属性总值,用math来过滤低于等于300的数据
因为上面把累加的结果都给了count所有,match也需要写count用于过滤
db.students.aggregate([
   {$group: {
     _id: "$cname",
     count: {
       $sum: "$score"
     }
    }},{$match: {count:{$gte:300}}},
]) 
(2). $max运用
求score属性里最高的数值
db.students.aggregate([
   {$group: {
     _id:null,
     count: {
       $max: "$score"
     }
    }}
]) 
先用cname属性进行分组,在用max来求每组的score属性最高数值
db.students.aggregate([
   {$group: {
     _id: "$cname",
     count: {
       $max: "$score"
     }
    }}
]) 
(3). $avg运用
先用cname属性进行分组,在用avg来求每组的score属性的平均值
db.students.aggregate([
   {$group: {
     _id:"$cname",
     count: {
       $avg: "$score"
     }
    }}
]) 
(4). 先用cname属性进行分组,在用push把score属性的值添加到数组
db.students.aggregate([
   {$group: {
     _id:"$cname",
     count: {
       $push: "$score"
     }
    }}
]) 
(3). $unwind运用
先给表插入一条带数组的数据
db.students.insert({name:"张三",age:19,gender:"女",cname:"三年级",interset:["吃饭","睡觉","跑步"]}) 
先用match过滤,在用$unwind为 $interset拆分为新数据
db.students.aggregate([
    {
        $match: {
          name:"张三"
        }
    },
   {
       $unwind: "$interset"
   }
]) 

(4). $project运用
把_id属性不显示,1为只显示该属性,0为不显示该属性
db.students.aggregate([
    {
        $match: {
          name:"张三"
        }
    },
   {
       $unwind: "$interset"
   },{
       $project: {
         _id:0
       }
   }
]) 
这里就是只显示id和name,不同的是我把name显示改成了username
db.students.aggregate([
    {
        $match: {
          name:"张三"
        }
    },
   {
       $unwind: "$interset"
   },{
       $project: {
         _id:1,
         username:"$name"
       }
   }
]) 
(5). $concat运用
$concat把数组里的属性和字符串进行拼接

db.students.aggregate([
    {
        $match: {
          name:"张三"
        }
    },
   {
       $unwind: "$interset"
   },{
       $project: {
         _id:1,
         info:{$concat:["$name","----","$cname"]}
       }
   }
]) 









