MongoDB 基本操作和聚合操作
一 . MongoDB 基本操作
基本操作可以简单分为查询、插入、更新、删除。
1 文档查询
| 作用 | MySQL SQL | MongoDB | 
| 所有记录 | SELECT * FROM users; | db.users.find(); | 
| age =18 | SELECT * FROM users WHERE age = 18; | db.users.find({“age”:18}); | 
| 筛选字段 | SELECT age FROM users WHERE age = 18; | db.users.find({“age”:18},{age:1}); | 
| 排序 | SELECT * FROM users ORDER BY name ASC | db.users.find().sort({name:1}); | 
| 比较 | SELECT * FROM users WHERE age > 18; | db.users.find({“age”:{$gt:18}}); | 
| 正则 | SELECT * FROM users WHERE name LIKE zha; | db.users.find({“name”:/^zha/}); | 
| 忽略 | SELECT * FROM users LIMIT 10 SKIP 20; | db.users.find().limit(10).skip(20); | 
| or | SELECT * FROM users WHERE a=1 or b=2; | db.users.find({$or : [{ a : 1} , {b : 2}]}); | 
| distinct | SELECT DISTINCT name FROM users; | db.users.distinct(‘name'); | 
| count | SELECT COUNT(name) FROM users; | db.users.find({name: {'$exists': true}}).count(); | 
2.文档插入
| 作用 | 操作指令(案例) | 
| 单文档插入 | db.inventory.insertOne( { item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } } ) | 
| 多文档批量插入 | db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } }, { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } }, { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } } ]) | 
文档大量插入时,通过多文档批量插入的形式可以大大提高性能,但是MongoDB 4.0 之前的版本是单文档事务型,所以,在多文档批量插入时,不能保证所有文档操作的原子性,即插入过程中,如果不幸出现了系统问题,有可能部分文档插入成功,而部分文档插入失败。
3.文档更新
文档更新主要有两种形式,一种是替换修改,一种是通过操作符修改。后者是常见的修改方式,在此主要讲解后者。
| 操作符 | 操作符描述 | 
| $inc | 根据给定的值增加字段 | 
| $set | 设置字段给定的值 | 
| $unset | 取消设置字段 | 
| $rename | 重命名字段为给定的值 | 
| $setOnInsert | 在upsert中,只在插入时设置字段; 如果要更新的文档存在那么$setOnInsert操作符不做任何处理 | 
| $bit | 只执行按位更新字段 | 
关于数组数据的更新操作符
| 数组操作符 | 数组操作符描述 | 
| $push | 添加值到数组中 | 
| $addToSet | 添加值到数组中,重复了也不处理 | 
| $pop | 从数组中删除第一个或最后一个值 | 
| $pull | 从数组中删除匹配查询条件的值 | 
| $eash | 与$push和$addToSet一起使用来操作多个值 | 
| $slice | 与$push和$each一起使用来缩小更新后数组的大小 | 
4.文档删除
集合数据的删除主要通过remove的命令来删除,类似于关系型数据库中的delete。
二 聚合操作
| MySQL | MongoDB | 功能描述 | 
| select | $project | 指定输出文档里的字段 | 
| where | $match | 选择要处理的文档,与find()类似 | 
| group by | $group | 根据key来分组文档 | 
| having | $match | 刷选文档 | 
| limit | $limit | 限制传递给下一步的文档数量 | 
| order by | $sort | 排序文档 | 
| count/sum | $sum | 统计 | 
| join | $unwind | 扩展数组,为每个数组入口生成一个输出文档 | 
| join | $look up | 表关联 | 
| skip | $skip | 跳过一定数据量的文档 | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号