MongoDB(2): 增删改操作

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

附加命令:

1、进入前端操作命令

1
./mongo [ip:端口]

说明:默认会自动选本地,端口27017

2、显示所有的库

1
> show dbs;   或者 show databases;

3、选择库

1
use  库名;

4、显示库所有的集合

1
> show collections;  或者 show tables;

5、显示当前使用的库

1
> db;

一、操作数据库、文档

1.1、数据库操作

1、创建数据库:MongoDB没有专门创建数据库的语句,可以使用“use” 来使用某个数据库,如果要使用

的数据库不存在,那么将会创建一个,会在真正向该库加入文档后,保存成为文件。

1
use  db_test;

2、删除数据库,命令:db.dropDatabase(),注意先要进入到需删除的库

1
2
3
4
5
use  db_test;
switched to db db_test
> db.dropDatabase();
"ok"  : 1 }
>

1.2、集合操作

1、创建集合:在MongoDB中不用创建集合,因为没有固定的结构,直接使用db.集合名称.命令 来操作就可以了。如果非要显示创建集合的话,用:db.createCollecion(“集合名称”);

2、删除集合,命令:dorp

1
> db.test1.drop();

1.3、查看集合的状态信息

db.集合名.stats();

二、增删改

2.1、添加

db.集合名称.insert(数据);

1
> db.test1.insert({ "username" : "zhangsan" ,age:2});

wKioL1klLcnTQbcBAAAXd7jDxtg151.jpg

insert方法,可以单独插入一个文档,也可以插入多个,用“[ ]”即可。注意:

  1:MongoDB会为每个没有“_id”字段的文档自动添加一个”_id”字段

  2:每个Doc必须小于16MB

  3:可以在shell中执行Object.bsonsize(文档名称);来查看size大小

    wKiom1klL3TRCs5sAAAPRqM2TOA482.jpg

2.2、删除

命令:remove,可以按条件来删除

只是删除文档,集合还在,如果使用 drop命令,会连带集合和索引都删掉

1
> db.test1.remove({age:2});

注意:如果使用remove没有带条件,则会删除此集合中所有的文档。

2.3、更新

db.集合名称. update(条件,新的文档[,boolean,boolean]);

1
> db.test1.update({ "userId" : "1" },{ "userId" : "1" , "username" : "zhangsan" , "age" :10});

wKioL1klM8LwI-LdAAA63JzWYEs248.jpg

问题:

  1、这里如果有多个文档匹配,只会更新第一个文档。

  2、这个修改的是整个文档

解决:

  使用修改器


更新修改器,用来做复杂的更新操作

1:$set :指定一个字段的值,如果字段不存在,会创建一个

1
> db.test1.update({ "userId" : "1" },{ "$set" :{ "username" : "zhangsan" }},0,1);

说明:如果userId为1,则更新其username为zhangsan

wKioL1klNhmy_w9CAAAnSjPDXCU007.jpg

1
> db.test1.update({ "userId" : "1" },{ $set :{ "score.1" :7}});

说明:更新数组score的索引为1的值为7,索引从0开始。

2:$unset :删掉某个字段

1
> db.test1.update({ "userId" : "1" },{ "$unset" :{ "username" :1}},0,1);

3:$inc :用来增加已有键的值,如果字段不存在,会创建一个。只能用于整型、长整型、或双精度浮点型的值。

1
> db.test1.update({ "userId" : "1" },{ "$inc" :{ "age" :3}},0,1);

说明:如果userId为1,则将其age的值增加3

4:$push:向已有数组的末尾加入一个元素,要是没有就新建一个数组

1
> db.test1.update({ "userId" : "1" },{ "$push" :{ "score" :1}},0,1);

wKiom1klT1ejcpY3AAAkaC3G-14264.jpg

5:$each:通过一次$push来操作多个值

1
> db.test1.update({ "userId" : "1" },{ "$push" :{ "score" :{ $each :[4,5,6]}}},0,1);

wKioL1klT8rSYKnpAAAlIS9uDsw894.jpg

6:$slice:限制数组只包含最后加入的n个元素,其值必须是负整数

1
> db.test1.update({ "userId" : "1" },{ "$push" :{ "score" :{ $each :[7,8,9], $slice :-5}}});

wKiom1klUG-QmK_4AAAmf27xuAo348.jpg

7:$sort:对数组中的元素,按照指定的字段来对数据进行排序(1为升序,-1为降序),然后再按照slice删除。

注意:不能只将$slice或者$sort与$push配合使用,且必须使用$each

1
> db.test1.update({ "userId" : "1" },{ "$push" :{ "score" :{ $each :[1,2,3], $slice :-5, $sort :-1}}});

wKioL1klUdGyPmLlAAAmagsXkl0637.jpg

8:$ne:判断一个值是否在数组中,如果不在则添加进去

1
> db.test1.update({ "userId" : "1" , "score" :{ $ne :4}},{ $push :{ "score" :4}});

wKiom1klVQLTN-LFAAANgDyggNk762.png

9:$addToSet:将数组作为数据集使用,以保证数组内的元素不会重复

1
> db.test1.update({ "userId" : "1" },{ $addToSet :{ "score" :8}});

10:$pop :从数组一端删除元素,{$pop:{key:1}},从末尾删掉一个,-1则从头部删除

1
> db.test1.update({ "userId" : "1" },{ $pop :{score:1}});

11:$pull:按照条件来删除所有匹配的元素

1
> db.test1.update({ "userId" : "1" },{ $pull :{score:7}});

12:$:用来修改第一个匹配的元素

1
> db.test1.update({ "score.0" :5},{ $set :{ "score.$" :7}});

说明:如果score的第0个索引值为5,则更新score的第0个索引值为7


三、补充方法

3.1、save方法

如果文档存在就更新,不存在就新建,主要根据”_id”来判断。

添加:

  wKiom1kmQOnCH1RZAAAqXzj3ius730.jpg

更新:

  wKiom1kmQTeS6tSTAAAwh_sufu8695.jpg

3.2、upsert方法

找到了符合条件的文档就更新,否则会以这个条件和更新文档来创建一个新文档。

指定update方法的第三个参数为true,可表示是upsert

wKioL1kmRjLx07TsAABEGUghDp4570.jpg

3.3、更新多个文档

MongoDB默认只更新符合条件的第一个文档,要更新所有匹配的文档,把第4个参数

设置为true。注意:

 1:只能用在$XXX的操作中

 2:最好每次都显示的指定update的第4个参数,以防止服务器使用默认行为

3.4、查询更新了多少个文档

使用命令:getLastError ,返回最后一次操作的相关信息,里面的n就是更新的文

档的数量。形如:db.runCommand({"getLastError":1});

wKioL1kmR1zDTXdcAAAVYsf-73s828.png

本文转自我爱大金子博客51CTO博客,原文链接http://blog.51cto.com/1754966750/1929096如需转载请自行联系原作者


我爱大金子

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
JSON NoSQL MongoDB
实时计算 Flink版产品使用合集之要将收集到的 MongoDB 数据映射成 JSON 对象而非按字段分割,该怎么操作
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5天前
|
DataWorks NoSQL fastjson
DataWorks操作报错合集之DataX进行MongoDB全量迁移的过程中,DataX的MongoDB Reader插件在初始化阶段找不到Fastjson 2.x版本的类库,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
1月前
|
存储 NoSQL Linux
【MongoDB】下载安装、指令操作
【MongoDB】下载安装、指令操作
82 1
|
1月前
|
分布式计算 DataWorks NoSQL
DataWorks操作报错合集之从MongoDB同步数据到MaxCompute(ODPS)时,出现报错,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
DataWorks操作报错合集之从MongoDB同步数据到MaxCompute(ODPS)时,出现报错,该怎么解决
|
1月前
|
存储 NoSQL 数据挖掘
深入探索MongoDB聚合操作:解析数据之美
深入探索MongoDB聚合操作:解析数据之美
|
27天前
|
NoSQL Shell MongoDB
python操作MongoDB部分
python操作MongoDB部分
15 0
|
1月前
|
NoSQL BI MongoDB
MongoDB 数据探索之道:查询文档操作详解
MongoDB 数据探索之道:查询文档操作详解
|
1月前
|
NoSQL 安全 MongoDB
MongoDB 数据精简指南:删除文档操作详解
MongoDB 数据精简指南:删除文档操作详解
|
1月前
|
NoSQL JavaScript 安全
精心操作MongoDB:删除数据库的关键步骤和重要事项
精心操作MongoDB:删除数据库的关键步骤和重要事项
|
1月前
|
NoSQL MongoDB 数据库
MongoDB排序操作解析:优化性能,精准控制数据展示
MongoDB排序操作解析:优化性能,精准控制数据展示