mongodb常用操作

mongodb常用操作

1. show dbs  //查看所有数据库
2. use mon(数据库名) //使用(操作)该数据库
3. show collections //查看数据库中的所有表
1. db.dorpDatabase() //删除该数据库
2. db.admin.dorp() //删除该数据库下的admin表

一、插入操作

1. use mon(数据库名) //创建数据库
2. db.admin.insert({"name":"小王","age":18})  //往xxx数据库中的表admin中插入一条数据 ,如果是新创建mon数据库,要插入至少一条数据才能生效

二、查询操作

db.admin.find()  //查看admin表下所有数据

条件查询

1.查询age为18的数据
db.admin.find({"age":"18"})
相当于: select * from admin where age = 18

2.查询当age大于18的数据
db.admin.find({"age":{$gt:18}})
相当于: select * from admin where age > 18

3.查询当age小于18的数据
db.admin.find({"age":{$lt:18}})
相当于: select * from admin where age < 18

4.查询当age小于等于18的数据
db.admin.find({"age":{$lte:18}})
相当于: select * from admin where age <= 18

5.查询当age大于18并且小于25的数据
db.admin.find({"age": {$gt:18,$lt:25}})
相当于: select * from admin where age > 18 and age <25

6.查询name中包含mongo的数据
db.admin.find({"name": /mongo/})
相当于: select * from admin where name like '%mongo%'  
//mysql中
// % 表示零个或多个字符,可以匹配任意类型和长度的字符,用于模糊查询
// _ 表示任何单个字符
// [] 表示指定范围([abcdef])或者集合([a-f])中的任意单个字符
// [^] 相当于[]中的取反
// * 同于dos命令中的通配符,代表多个字符
// ? 同于dos命令中的?通配符,代表单个字符
// # 大致同上, 不同的是只能代表单个数字
// [!]排除, 它只代表单个字符

7.查询name中以mongo开头的
db.admin.find({"name": /^mongo/})
相当于: select * from admin where name like 'mongo%'

8.查询name中以mongo结尾的
db.admin.find({"name": /mongo$/})
相当于: select * from admin where name like '%mongo'

9.指定列name、age数据
db.admin.find({"name":"小王"}, {name:1,age:1})  
//也可以用ture和false,效果一样, name:false表示显示name以外的信息
相当于: select name,age from admin where name ="小王"
//查询的数据列只有name和age

10.按照年龄排序
db.admin.find().sort({"age":1}) //表示升序
db.admin.find().sort({"age":-1}) //表示降序

11.查询前n条数据
db.admin.find().limit(5)
相当于: select * from amdin limit 5

12.查询n条以后的数据
db.admin.find().skip(5)
//跳过前5条数据

13.or查询
db.admin.find($or:[{"age":18},{"age":25}])
相当于: select * from admin where age=18 or age=25

14.findOne查询第一条数据
db.admin.findOne()
//与db.admin.find().limit(1)相同

15. 查询某个结果的记录条数 统计数量
db.admin.find().count()

三、修改操作

1. 把name为小王的数据改成name为张三
db.admin.update({"name":"小王"},{$set:{"name":"张三"}})

2. 把name为小王的数据新添加一个性别,值为男
db.admin.update({"name":"小王"},{$set:{"sex":"男"}})

//有$set的只有修改一条匹配到的数据,若是想批量修改,则需要配置第三个参数
3.把name为小王的全部数据的age都改为25
db.admin.update({"name":"小王"},{$set:{"age":18}},{multi:true})

四、删除操作

db.collectionsName.remove({"borough":"Manhattan"})

db.admin.remove() //没有传递参数,即为删除所有数据

eg: db.admin.remove({"name":"小王"})
//删除admin表中name为小王的数据 (如果有多条数据,会全部删除)

//要是想只删除一条,则要添加第二个参数
db.admin.remove({"name":"小王"},{justOne:true})

五、增加索引

查询具体的执行时间
db.admin.find().explain("executionStats")

创建索引

创建索引的命令
db.admin.ensureIndex({"name":1})

获取当前集合的索引
db.admin.getIndexes()

删除索引的命令
db.admin.dropIndex({"name":1})

复合索引
db.admin.ensureIndex({"name":1,"age":-1})
//使用复合索引时,使用name和age同时查询可以命中,只使用name查询时也可以命中,但是只基于age查询时无效,和设置索引的顺序有关

唯一索引
db.admin.ensureIndex({"name"1}{"unique":true})
//设置唯一索引,不有重复的值

六、集合管道

使用聚合管道可以对集合中的文档进行变换和组合

常见操作符
$project 增加、删除、重命名  //限制想显示的数据,相当于find()中的第二个参数的作用
$match 条件匹配。只有满足条件的文档从才能进入下一阶段
$limit 限制结果的数量
$skip 跳过文档的数量
$sort 条件排序
$group 条件组合结果
$lookup 表关联。用引入其它集合的数据

SQLNOSQL对比:
where            $match
group by         $group
having           $match     //having多与group by结合使用
select           $project
order by         $sort
limit            $limit
sum()            $sum   //求和
count()          $count
join             $lookup


看下数据模拟
db.order.insert({"order_id":"1","uid":"10","trade_no":"111","all_price":100,"all_num":2})
db.order.insert({"order_id":"2","uid":"7","trade_no":"222","all_price":90,"all_num":2})
db.order.insert({"order_id":"3","uid":"9","trade_no":"333","all_price":20,"all_num":6})

db.order_item.insert({"order_id":"1","title":"商品鼠标1","price":50,num:1})
db.order_item.insert({"order_id":"1","title":"商品键盘2","price":50,num:2})

db.order_item.insert({"order_id":"2","title":"牛奶","price":50,"num":1})
db.order_item.insert({"order_id":"2","title":"酸奶","price":40,"num":1})

db.order_item.insert({"order_id":"3","title":"矿泉水","price":2,"num":5})
db.order_item.insert({"order_id":"3","title":"毛巾","price":10,"num":1})

$project
修改文档的结构,可以用来重命名、增加或删除文档中的字段
db.order.aggregate([
    {
        $project:{trade_no:1,all_price:1}
    }
])
//相当于 db.order.find({}, {"trade_no":1,"all_price":1})  

$match 
用于过滤文档。用法类似于find()方法中的参数 
db.order.aggregate([
    {
        $project:{order_id:1}
    },
    {
		$match:{"all_price":{$gte:90}}
    }
])
//相当于 db.order.find({"all_price":{$gte:90}}, {"order_id":1})

 $group
 将集合中的文档进行分组,可用于统计结果
 eg:计算order_item表中各个order_id的商品的数量
 db.order_item.aggregate([
     {
         $group:{_id:"$order_id", total:{$sum:"$num"}}
         //_id是固定的写法???
     }
 ])
得到的结果:
{"_id":"3","total":6}
{"_id":"2","total":2}
{"_id":"1","total":3}

$sort
db.order.aggregate([
    {
        $project:{trade_no:1,all_price:1}
    },
    {
        $match:{"all_price":{$gte:90}}
    },
    {
        $sort:{"all_price""-1} //-1为降序 1为升序
    }
])

$limit
db.order.aggregate([
    {
        $project:{trade_no:1,all_price:1}
    },
    {
        $match:{"all_price":{$gte:90}}
    },
    {
        $sort:{"all_price""-1} //-1为降序 1为升序
    },
    {
        $limit:1  //只请求一条
    }
])

$skip
db.order.aggregate([
    {
        $project:{trade_no:1,all_price:1}
    },
    {
        $match:{"all_price":{$gte:90}}
    },
    {
        $sort:{"all_price""-1} //-1为降序 1为升序
    },
    {
    	$skip:1 //跳过一条    
    }
])
        
$lookup 表关联
db.order.aggregate([
    {
        $lookup:{
            from:"order_item"  //要关联的表,
            localFied:"order_id",  //order表的order_id
            foreignField:"order_id", //关联表的order_id
            as:"items"  //结果存放数组的名字
        }
    }
])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值