MongoDB(2): 增删改操作

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

附加命令:

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
相关文章
|
5月前
|
NoSQL JavaScript 前端开发
如何使用 Node.js 连接和操作 MongoDB 数据库?
如何使用 Node.js 连接和操作 MongoDB 数据库?
253 2
|
4月前
|
NoSQL MongoDB Python
深入了解 Python MongoDB 操作:排序、删除、更新、结果限制全面解析
使用 sort() 方法对结果进行升序或降序排序。 sort() 方法接受一个参数用于“字段名”,一个参数用于“方向”(升序是默认方向)。
70 0
|
10天前
|
NoSQL MongoDB
MongoDB代码操作
MongoDB代码操作
|
20天前
|
NoSQL MongoDB 数据库
MongoDB黑窗口操作(CRUD)
MongoDB黑窗口操作(CRUD)
|
1月前
|
缓存 NoSQL 关系型数据库
【MongoDB】MongoDB更新操作时是否立刻fsync到磁盘?
【4月更文挑战第2天】【MongoDB】MongoDB更新操作时是否立刻fsync到磁盘?
|
1月前
|
消息中间件 NoSQL Kafka
云原生最佳实践系列 5:基于函数计算 FC 实现阿里云 Kafka 消息内容控制 MongoDB DML 操作
该方案描述了一个大数据ETL流程,其中阿里云Kafka消息根据内容触发函数计算(FC)函数,执行针对MongoDB的增、删、改操作。
|
4月前
|
机器学习/深度学习 自然语言处理 NoSQL
|
4月前
|
存储 NoSQL MongoDB
Python小姿势 - Python操作MongoDB数据库
Python小姿势 - Python操作MongoDB数据库
|
7月前
|
NoSQL API MongoDB
Python使用PyMongo4.x操作MongoDB总结
PyMongo是一个Python编程语言中用于连接和操作MongoDB数据库的库。它提供了丰富的功能和API,使开发者能够在Python中轻松地进行MongoDB的数据交互和管理。
89 2
|
8月前
|
NoSQL JavaScript Java
MongoDB 入门教程系列之三:使用 Restful API 操作 MongoDB
MongoDB 入门教程系列之三:使用 Restful API 操作 MongoDB
85 0