MongoDB数据库,集合,文档查询

MongoDB数据库,集合文档查询

数据库相关操作

显示所有数据库

show dbs;

创建,连接数据库

use database_name;

显示当前连接的数据库

db;

删除数据库

db.dropDatabase();->注意这里是删除的当前连接的数据库

集合相关操作

显示当前数据库下所有集合

show collections;

创建集合

  1. 隐式创建

在这里插入图片描述

注意隐式创建集合的时候insert()括号里不能为空,否则报错
  1. 显示创建

在这里插入图片描述

删除集合

db.a.drop();->删除集合a

文档相关操作

文档查询

查询所有字段信息

db.a.find();

查询特定字段信息
db.a.find({item:'电影票'},{name:1,price:1,_id:0});
/*这里第一个{}表示查询的条件,比如查询某个字段下的某个内容
第二个{}表示你想要显示的字段,'1'表示显示,'0'表示不显示
上面指令的意思就是查询字段为item下的所有电影票文档,只显示name和price字段,不显示_id字段(如果不写_id,系统会默认自己显示)*/

db.a.find({},{name:0,price:0});
/*第一个{}为空表示查询所有文档,第二个{}里面name,price字段为0,表示除了这2个字段不显示,其他都显示*/

find()如果跟2个参数,那么每个参数都是文档类型

第一个参数表示查询条件

第二个参数表示显示的内容

排序显示
单字段排序
db.a.find().sort({price:1});

表示以价格升序排序

1代表升序,-1代表降序

多字段排序
db.a.find().sort({price:1,stocks:-1});

表示以价格升序,库存量降序

注意:这里有前后之分,要先按price排序,再按stocks排序,且stocks的降序是建立在price升序之上,也就是说当price排序完有重复的文档时,才会按stocks降序

空值查询

比如现在有这样的一个情景,我在a中插入3个文档,

第一个文档字段item为空值

第二个文档直接没有item这个字段

第三个文档有item字段,且里面还有个值

db.a.insert([
{_id:1,item:null},
{_id:2},
{_id:3,item:'computer'}
]);

1.现在我要查询item为null的文档,可以如下:

db.a.find({item:{$type:10}});

10在MongoDB中代表null值

2.我要查询没有item这个字段的文档,可以如下:

db.a.find({item:{$exists:false}});

使用操作符$exists

false表示没有该字段,true表示有

分组统计

使用聚合函数aggregate()和操作符$group

没有额外条件的分组

如:将商品按item分组,统计各组库存量的和

db.a.aggregate(
    {$group:{_id:"$item",total:{$sum:"$stocks"}}}
);

_id:后面接你要分组的字段

total是随便起的一个名字(和),并不是格式要求

$sum:"stocks"表示对库存量stocks求和

有其他条件的分组

需要使用操作符**$match**

什么叫有其他条件,比如说上面那个例子,

我再在此基础上,还要统计出价格在50到80之间的文档,如下:

db.a.aggregate(
    {$match:{price:{$lte:80,$gte:50}}},
    {$group:{_id:"$item",total:{$sum:"$stocks"}}}
              );

注意这里的格式

第一个{}表示匹配的条件(也就是分组后的条件),

第二个{}表示分组的条件

特别注意:

当$sum后面求和的字段其类型为整型时,很容易理解,就是将其中的数值求和就行了

当$sum后面求和的字段是字符型时,我们可以写一个1,表示以1为计量单位,对这条文档的这个字段下的内容计数

如:

db.a.aggregate(
{$group:{_id:"$item",total:{$sum:1}}}
);
文档数组查询

文档数组,就是一个数组,里面的元素都是文档类型

比如有一个字段test,该字段下的内容就是文档数组

第一种查询方法:

db.a.find({test:{name:'A',price:25}});

这种查询指查找test字段中文档数组里某个元素为{name:‘A’,price:25}的文档,{name:‘A’,price:25}的内容要完全一致,顺序不能变

第二种查询方法:

db.a.find({test:{$elemMatch:{name:'A',price:25}}});

这一次加了操作符$elemMatch,表示只要该文档数组里有这个元素就行,不管顺序如何(name和price这2个键还是要有的)

查询某个文档的文档数组里的某个元素的某个字段

(有点绕…)

意思就是比如说我现在要求显示test里的第一个元素的price:

db.a.find({},{"test.0.price":1,_id:0});

不管是第几个元素,显示所有元素的price:

db.a.find({},{"test.price":1,_id:0});

注意:内嵌文档,数组元素,都需要放在引号内

文档更新

update() 更新一个文档

updateMany() 更新多个或所有文档

该函数通常跟2个参数,

第一个参数为要更新的字段

第二个参数为要更新的条件

$set

更新,新建字段

更新一个文档

db.a.update({item:'paper'},{$set:{price:15}});

注意:如果这里不加$set,那么会将该文档的所有字段全改为price!

更新多个文档

db.a.updateMany({},{$set:{price:20}});

将所有文档的price改为20

这2个地方的$set都有两重含义:

1.如果有该字段(price),那么直接将其更新

2.如果没有该字段(price),那么会先创建该字段,也就是新加字段,然后赋予其初始值

$unset

删除字段

db.a.updateMany({},{$unset:{price:1}});

1表示删除字段price,或者用“”代替(引号里什么也没有)

$inc
db.a.updateMany({},{$inc:{price:5}});

表示所有价格上涨5,改为-5表示下降

文档删除

deleteOne() 删一条文档

deleteMany() 删多条或全部文档

db.a.deleteOne({item:"movie"});//删一条
db.a.deleteMany({item:"movie"});//删多条
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值