非关系型数据库

mongodb 指令 删除 mongodb怎么删除数据_游标

MongoDB

mongodb 指令 删除 mongodb怎么删除数据_增删改查_02

新建的默认有两个数据库

admin–配置权限

local–固定的重要数据

一、基本操作

查看数据库

show dbs

创建数据库(隐式创建)

mongodb 指令 删除 mongodb怎么删除数据_mongodb 指令 删除_03


没有成功,需要两步

mongodb 指令 删除 mongodb怎么删除数据_聚合_04


还可以

mongodb 指令 删除 mongodb怎么删除数据_聚合_05

查看集合

show tables
show collections

mongodb 指令 删除 mongodb怎么删除数据_增删改查_06

删除库和集合

db.collectionName.drop()    // 删除集合
db.dropDatabase()    // 删除数据库

库内没有集合了,库也会自动删除

mongodb 指令 删除 mongodb怎么删除数据_MongoDB_07


mongodb 指令 删除 mongodb怎么删除数据_mongodb 指令 删除_08

二、增删改查

(一)增:insert方法

MongoDB存储的时文档,文档其实就是json格式的对象。

增加单条数据

mongodb 指令 删除 mongodb怎么删除数据_游标_09

增加多条数据

mongodb 指令 删除 mongodb怎么删除数据_聚合_10

(二)删:remove方法

语法

db.collection.remove(查询表达式, 选项)

选项

{justOne:true/false},是否只删一行,默认为false

注意

  1. 查询表达式依然是个json对象{age:20}
  2. 查询表达式匹配的行,将被删除
  3. 如果不写查看表达式,collection中的所有文档 将被删除

例1:删除stu表中 sn属性值为’001’的文档

db.stu.remove({sn:’001’})

例2: 删除stu表中gender属性为m的文档,只删除1行

db.stu.remove({gender:’m’,true});

判断符

name:‘zhangsan’

相等

$gt:10

大于

$lt:10

小于

$gte:10

大于等于

$lte:10

小于等于

$ne:10

不等于

$nin:[1,2]

不在

$in:[1,2]


$and:[条件1,条件2]

并且

$or:[条件1,条件2]


练习

1.删除name为’tiantian’的数据

mongodb 指令 删除 mongodb怎么删除数据_mongodb 指令 删除_11

2.删除age大于12的数据

mongodb 指令 删除 mongodb怎么删除数据_mongodb 指令 删除_12

3.删除age小于11的数据

mongodb 指令 删除 mongodb怎么删除数据_增删改查_13

4.删除age不等于11的数据

mongodb 指令 删除 mongodb怎么删除数据_MongoDB_14

(三)改:update方法

语法

db.collection.update(查询表达式,新值,选项)

注意

如果使用下面语句,不是更新数据,而是更新文档。更新就是用新文档替换旧文档。

mongodb 指令 删除 mongodb怎么删除数据_游标_15

$set–修改某列的值

mongodb 指令 删除 mongodb怎么删除数据_游标_16


$unset–删除某个列

mongodb 指令 删除 mongodb怎么删除数据_游标_17

$rename–重命名某个列

mongodb 指令 删除 mongodb怎么删除数据_游标_18

$inc–增加某个列

mongodb 指令 删除 mongodb怎么删除数据_聚合_19

选项

{upsert:true/false,multi:true/false}

upsert:true/false:默认为false,为true时,不存在则插入,如果存在就更新。

mongodb 指令 删除 mongodb怎么删除数据_游标_20

multi:true/false默认为false,为true时,会更新匹配到的所有数据。

mongodb 指令 删除 mongodb怎么删除数据_MongoDB_21

(四)查:find方法

语法

db.collection.find(查询表达式,查询的列)

$nin–>not in

mongodb 指令 删除 mongodb怎么删除数据_增删改查_22

_id:只有在指定不显示,才会没有,不写默认都是显示的

其他列,不指定都不显示。

$all–指数组所有单元匹配,就是指指定的内容都要有,通过一个list指定

mongodb 指令 删除 mongodb怎么删除数据_聚合_23

$exists–是否含有某个列

1–存在

0–不存在

mongodb 指令 删除 mongodb怎么删除数据_游标_24


count()–计算查询结果的数量

mongodb 指令 删除 mongodb怎么删除数据_MongoDB_25

limit()–查看指定数量的结果

mongodb 指令 删除 mongodb怎么删除数据_MongoDB_26


skip()–跳过指定数目

mongodb 指令 删除 mongodb怎么删除数据_聚合_27


skip()和limit()配合使用可以制作分页。

练习

1.主键为32的商品

mongodb 指令 删除 mongodb怎么删除数据_MongoDB_28


2.不属第3栏目的所有商品($ne)

mongodb 指令 删除 mongodb怎么删除数据_mongodb 指令 删除_29

3.本店价格高于3000元的商品{$gt}

mongodb 指令 删除 mongodb怎么删除数据_mongodb 指令 删除_30

4.取出第4栏目或第11栏目的商品($in)

db.goods.find({cat_id:{$in:[4,11]}},{cat_id:1,goods_name:1})

mongodb 指令 删除 mongodb怎么删除数据_mongodb 指令 删除_31


5.取出100<=价格<=500的商品($and)

db.goods.find({$and:[{shop_price:{$gte:100}},{shop_price:{$lte:500}}]},{shop_price:1,goods_name:1})

mongodb 指令 删除 mongodb怎么删除数据_mongodb 指令 删除_32


6.取出不属于第3栏目且不属于第11栏目的商品($and mongodb 指令 删除 mongodb怎么删除数据_游标_33nor分别实现)

db.goods.find({$and:[{cat_id:{$ne:3}},{cat_id:{$ne:11}}]},{goods_name:1,cat_id:1})

mongodb 指令 删除 mongodb怎么删除数据_游标_34

db.goods.find({cat_id:{$nin:[3,11]}},{goods_name:1,cat_id:1})

mongodb 指令 删除 mongodb怎么删除数据_聚合_35

db.goods.find({$nor:[{cat_id:3},{cat_id:11}]},{goods_name:1,cat_id:1})

mongodb 指令 删除 mongodb怎么删除数据_聚合_36

7.取出价格大于100且小于300或者大于4000且小于5000的商品

db.goods.find({$or:[{$and:[{shop_price:{$gt:100}},{shop_price:{$lt:300}}]},{$and:[{shop_price:{$gt:4000}},{shop_price:{$lt:5000}}]}]},{goods_name:1,shop_price:1})

mongodb 指令 删除 mongodb怎么删除数据_MongoDB_37

8.取出goods_id%5 == 1, 即,1,6,11,…这样的商品

db.goods.find({goods_id:{$mod:[5,1]}},{goods_id:1,goods_name:1})

mongodb 指令 删除 mongodb怎么删除数据_MongoDB_38

三、聚合操作

语法

db.COLLECTION_NAME.aggregate( [ {管道1}, {管道2}, {管道3}, … ] )

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理,管道操作是可以重复的。

常用的管道操作

$project

修改输入文档的结构。可以用来重命名、增加或修改域,也可以用于创建计算结果以及嵌套文档。

$match

用于过滤数据,只输出符合条件的文档。使用MongoDB的标准查询操作。

$limit

用来限制MongoDB聚合管道返回的文档数。

$skip

在聚合管道中跳过指定数量的文档,并返回余下的文档。

$group

将集合中的文档分组,可用于统计结果。

$sort

将输入文档排序后输出。

group中的操作表达式

表达式

描述

$sum

计算总和。

$avg

计算平均值

$min

获取集合中所有文档对应值得最小值。

$max

获取集合中所有文档对应值得最大值。

$first

根据资源文档的排序获取第一个文档数据。

$last

根据资源文档的排序获取最后一个文档数据

练习

1.查询每个栏目下的商品数量

db.goods.aggregate([{$group:{_id:'$cat_id',total:{$sum:1}}}])

mongodb 指令 删除 mongodb怎么删除数据_mongodb 指令 删除_39

2.查询goods中有多少条商品

db.goods.aggregate([{$group:{_id:null,total:{$sum:1}}}])
或
db.goods.find().count()

mongodb 指令 删除 mongodb怎么删除数据_聚合_40


3.查询每个栏目下价格大于50元的商品个数

思路:

(1)找出价格大于50元的商品

(2)以cat_id分组,求sum

db.goods.aggregate([{$match:{shop_price:{$gt:50}}},{$group:{_id:'$cat_id',sum:{$sum:1}}}])

mongodb 指令 删除 mongodb怎么删除数据_聚合_41

4.查询每个栏目下的库存量(商品数量)

db.goods.aggregate([{$group:{_id:"$cat_id",goods_total:{$sum:'$goods_number'}}}])

mongodb 指令 删除 mongodb怎么删除数据_mongodb 指令 删除_42

5.查询每个栏目下,价格大于50的商品个数,并筛选出商品个数大于3的栏目

思路:

(1)查找价格大于50的商品

(2)以cat_id分组,求出每组的商品个数

(3)筛选出商品个数为3的

db.goods.aggregate([{$match:{shop_price:{$gt:50}}},{$group:{_id:'$cat_id',total:{$sum:1}}},{$match:{total:{$gt:3}}}])

mongodb 指令 删除 mongodb怎么删除数据_增删改查_43

6.查询每个栏目的商品平均价格,并按照平均价格由高到低排序

{$sort:{total:1}}:按total这个列排序,1表示升序,-1表示降序

思路:

(1)以cat_id分组,求出组内商品的平均价格

(2)按照平均价格降序排列

db.goods.aggregate([{$group:{_id:"$cat_id",avg_price:{$avg:"$shop_price"}}},{$sort:{avg_price:-1}}])

mongodb 指令 删除 mongodb怎么删除数据_MongoDB_44

四、游标

我们查询时使用的db.collectionName.find()方法,会将所有的数据都查询出来。

python中,有生成器,每次给我们返回一条数据,MongoDB中,有游标与它类似。

定义

通俗的说游标不是查询结果,而是查询的返回资源或者接口,就像python中的生成器那样,可以一次一次的获取每一个资源。

声明

var cursor_name = db.collectionName.find()

操作

cursor.hasNext()    //判断游标是否已经取到尽头
cursor.next()    // 取出游标的下一个单元
cursor.toArray()    //看到所有行
cursor.toArray()[2]    //看到第二行
注意不要使用toArray()方法,原因是会把所有的行立即以对象的形式放在内存中,这样就失去了使用游标的意义,造成了资源浪费,可以在取出少数的几行时使用。

练习

使用while循环打印游标结果

mongodb 指令 删除 mongodb怎么删除数据_聚合_45

cursor.forEach()回调函数

var func = function(obj){print(obj.goods_name)}
var cursor = db.goods.find().skip(10).limit(10)
cursor.forEach(func)

mongodb 指令 删除 mongodb怎么删除数据_mongodb 指令 删除_46