一 . 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  跳过一定数据量的文档 

MongoDB 基本操作和聚合操作的更多相关文章

  1. MongoDB中的聚合操作

    根据MongoDB的文档描述,在MongoDB的聚合操作中,有以下五个聚合命令. 其中,count.distinct和group会提供很基本的功能,至于其他的高级聚合功能(sum.average.ma ...

  2. MongoDB学习笔记——聚合操作之聚合管道(Aggregation Pipeline)

    MongoDB聚合管道 使用聚合管道可以对集合中的文档进行变换和组合. 管道是由一个个功能节点组成的,这些节点用管道操作符来进行表示.聚合管道以一个集合中的所有文档作为开始,然后这些文档从一个操作节点 ...

  3. MongoDB学习笔记——聚合操作之MapReduce

    MapReduce MongoDB中的MapReduce相当于关系数据库中的group by.使用MapReduce要实现两个函数Map和Reduce函数.Map函数调用emit(key,value) ...

  4. MongoDB学习笔记——聚合操作之group,distinct,count

    单独的聚合命令(group,distinct,count) 单独聚合命令 比aggregate性能低,比Map-reduce灵活度低:但是可以节省几行javascript代码,后面那句话我自己加的,哈 ...

  5. mongoDB与sql聚合操作对应图

    SQL Terms, Functions, and Concepts MongoDB Aggregation Operators WHERE $match GROUP BY $group HAVING ...

  6. MongoDB入门三步曲2--基本操作(续)--聚合、索引、游标及mapReduce

    mongodb 基本操作(续)--聚合.索引.游标及mapReduce 目录 聚合操作 MapReduce 游标 索引 聚合操作 像大多关系数据库一样,Mongodb也提供了聚合操作,这里仅列取常见到 ...

  7. MongoDB的聚合操作以及与Python的交互

    上一篇主要介绍了MongoDB的基本操作,包括创建.插入.保存.更新和查询等,链接为MongoDB基本操作. 在本文中主要介绍MongoDB的聚合以及与Python的交互. MongoDB聚合 什么是 ...

  8. MongoDB 聚合操作

    在MongoDB中,有两种方式计算聚合:Pipeline 和 MapReduce.Pipeline查询速度快于MapReduce,但是MapReduce的强大之处在于能够在多台Server上并行执行复 ...

  9. MongoDB之三(高级操作 聚合、游标)

    一: 聚合 常见的聚合操作跟sql server一样,有:count,distinct,group,mapReduce. <1> count count是最简单,最容易,也是最常用的聚合工 ...

随机推荐

  1. [Swift]LeetCode801. 使序列递增的最小交换次数 | Minimum Swaps To Make Sequences Increasing

    We have two integer sequences A and B of the same non-zero length. We are allowed to swap elements A ...

  2. [Swift]LeetCode1024. 视频拼接 | Video Stitching

    You are given a series of video clips from a sporting event that lasted T seconds.  These video clip ...

  3. hive中beeline取回数据的完整流程

    这里我们从BeeLine.execute讲起. 接下来来到BeeLine.dispatch,这里的入参就是sql语句.方法的最后调用了Commands.sql,然后调用到了Commands.execu ...

  4. 面试挂了阿里却拿到网易offer,一个三年Java程序员的面试总结!

    前言 15年毕业到现在有三年多了,最近去面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中... 最终有幸去了网易. ...

  5. ASP.Net Core项目在Mac上使用Entity Framework Core 2.0进行迁移可能会遇到的一个问题.

    在ASP.Net Core 2.0的项目里, 我使用Entity Framework Core 2.0 作为ORM. 有人习惯把数据库的连接字符串写在appSettings.json里面, 有的习惯写 ...

  6. 死磕 java集合之TreeMap源码分析(二)- 内含红黑树分析全过程

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 插入元素 插入元素,如果元素在树中存在,则替换value:如果元素不存在,则插入到对应的位置, ...

  7. bootstrap4的出现(或这篇文章可以叫做bs4与bs3的区别)

    前言:在bootstrap4出现之后修改了bootstrap3的不方便之处,让使用框架的前端开发者更加便捷..(bootstrap下文中简称为bs) 一.栅格系统 相对于原来的bs3,bs4具有了范围 ...

  8. qt之窗口换肤

    1.相关文章 Qt 资源系统qt的moc,uic,rcc命令的使用 2.概要    毕业两年了,一直使用的是qt界面库来开发程序,使用过vs08.10.13等开发工具,并安装了qt的插件,最近在做客户 ...

  9. MyBatis 分页插件 PageHelper 使用

    1.  引入Maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...

  10. JDK1.8源码(二)——java.util.LinkedList

      LinkedList定义 LinkedList 是链表实现的线性表(双链表),元素有序且可以重复. public class LinkedList<E> extends Abstrac ...