MongoDB(2): 增删改操作

本文介绍了MongoDB的基本操作,包括数据库、集合的创建与删除,文档的增删改查等核心功能,并详细解释了更新操作符如$set、$unset等的使用方法。

附加命令:

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如需转载请自行联系原作者


我爱大金子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值