写这篇文章的目的是:方便自己查阅,当然,如果可以帮到你,真的很开心

1.刚听说公司要用MongoDB的时候,是很晕的,一是不知道如何着手查询,因为完全不同于SQL的方式,二是不知道为什么要用MongoDB,好在哪里

2.后来查阅了资料,了解MongoDB的发展史、工作原理、选举机制、聚合框架、常用操作查询、设计模式等等,有了初步的概念

当然这些不作为本文的重点,重点讲一下常用的操作查询

3.常用查询如下

一、对比SQL

查询条件对照表

SQL

MQL

a=1

{a:1}

a<>1

{a:{$ne:1}}

a<1

{a:{$lt:1}}  

a>1

{a:{$gt:1}} --greater than

a<=1

{a:{$lte:1}}

a>=1

{a:{$gte:1}} --greater than equal

查询逻辑对照表

SQL

MSQL

a=1 AND b=1

{a:1,b:1} 或 {$and:[{a:1},{b:1}]}

a=1 OR  b=1

{$or:[{a:1},{b:1}]}

a is NULL

{a:{$exists:false}}

a in (1, 2, 3)

{a:{$in:[1,2,3]}}

a is not in (1, 2, 3)

{a:{$nin:[1,2,3]}}

1.添 insertOne ()<-->insert into

操作格式:

db.<集合>.insertOne(<JSON对象>)

db.<集合>.insertMany([<JSON 1>,<JSON2>,<JSON 3>,<JSON n>])

示例:

db.users.insertOne({name:”Lisa”})

db.users.insertMany([

{name:”Amy”},

{name:”Lucky”},

{name:”Nancy”}

])

2.删 remove()<-->delete

使用remove删除文档

*remove需要配合查询条件使用

*匹配查询条件的文档会被删除

*指定一个空文档会删除所有文档

db.users.remove({name:"Lisa"})  //删除name=Lisa的记录

3.改 update()<-->update table set...

*update操作的执行格式:db.<集合>.update(<查询条件>,<更新字段>)

db.fruits.insertMany([{name:"apple"},{name:"orange"},{name:"pear"}])

db.fruits.updateOne({name:"apple"},{$set:{from:"China"}})

*使用updateOne表示无论条件匹配多少条记录,始终更新第一条

*使用updateMany表示条件匹配多少条就更新多少条

*upadateOne/updateMany方法,要求更新条件部分必须满足下面八个之一,否则会报错

$set

$unset

使用update更新数组

$push:增加一个对象到数组底部

$pushAll:增加多个对象到数组底部

$pop:从数组底部删除一个对象  

$pull:如果匹配指定的值,从数组中删除相应的对象

$pullAll: 如果匹配任意的值,从数组中删除相应的对象

$addToSet:如果不存在则增加一个值到数组

示例:

db.fruits.updateOne({name:"apple"},{from:"China"})

4.查 find()<-->select

关于find:

*find是MongoDB中查询数据的基本指令,相当于SQL中的select

*find返回的是游标

游标是什么意思:游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标中获取记录,并赋给主变量,交由主语言进一步处理

一般需要对查询的结果集中的数据再进行二次处理才会用到

find示例

db.movies.find({year:1975}) //单条件查询

db.movies.find({year:1989,title:Batman})  //多条件and查询

db.movies.find({$and:[{year:1989},{title:Batman}]})  //and的另一种形式

db.movies.find({$or:[{year:1989},{title:Batman}]})  //多条件or查询

Db.movies.find({title:/^B/})   //按正则表达式查找  (大写B开头的)

 

 

二、MongoDB的聚合查询

 

什么是MongoDB聚合框架

.MongoDB聚合框架(Aggregation Framework)是一个计算框架,它可以:

*作用在一个或几个集合上;

*对集合中的数据进行的一系列运算;

*将这些数据转化为期望的形式;

.从效果而言,聚合框架相当于SQL查询中的:

*GROUP BY

*LEFT OUTER JOIN

*AS等

管道(Pipline)和步骤(Stage)

.整个聚合运算过程称为管道(Pipline),它是由多个步骤(stage)组成的,每个管道:

.接受一系列文档(原始数据);

.每个步骤对这些文档进行一系列计算;

.结果文档输出给下一个步骤;

MongoDB常用操作查询

 

聚合运算的基本格式

pipline=[$stage1,$stage2,$stage3,.......,$stageN];

db.<COLLECTION>.aggregate(

pipline,

{ options }  //目前没有涉及到

);

常见步骤中的运算符

$match

$project

$group

$eq/$gt/$gte/$lt/$lte

$and/$or/$not/$in

$geoWithin/$intersect

选择需要的或排除不需要的字段

$map/$reduce/filter

$range

$multiply/$divide/$substract/$add

$year/$month/$dayOfMonth/$hour/$minute/$second

$sum/$avg

$push/$addToSet

$first/$last/$max/$min

 

常见步骤

步骤

作用

SQL等价运算符

$match

过滤

WHERE

$project

投影

AS

$sort

排序

ORDER BY

$group

分组

GROUP BY

$skip/$limit

结果限制

SKIP/LIMIT

$lookup

左外连接

N/A

$unwind

展开数组

N/A

$graphLookup

图搜索

N/A

$facet/$bucket

分面搜索

N/A

MQL常用步骤与SQL对比

 

MongoDB常用操作查询MongoDB常用操作查询

MongoDB常用操作查询MongoDB常用操作查询

 

相关文章: