跟我一起学MongoDB--增删改

在MongoDB中数据都是以文档(键值对)的形式进行存储的。这里的数据类型是针对键值对中的值进行说明的。

1.MongoDB中的数据类型

1.1null

null表示空值的含义。

1.2布尔类型

true表示真

false表示假

 

1.3数值类型

默认支持64位的浮点数来表示数值类型。

通过NumberInt或NumberLong类,来表示4字节或8字节的有符号整数。

通过NumberInt或NumberLong类创建整型数据时,输入必须为整数形式。

 

1.4字符串类型

utf-8支持的字符串类型。

1.5日期类型

64位整数,表示自unix(1970-01-01)以来的毫秒数,不包含时区信息。

通过new Date()创建。

 

1.6正则表达式

查询时可以使用正则表达式,语法与JavaScript的正则表达式语法相同。

 

1.7数组类型

数据类型可以当作数组使用,也可以当作集合使用。主要根据使用过程中使用的方法来确定。

 

1.8内嵌文档

内嵌文档就是指值为另一个键值对的含义,MongoDB中以Object类型表示

1.9ObjectID

ObjectID是一个12字节的ID,是文档的唯一标识。可通过ObjectId()创建。

  • 前4个字节表示时间戳
  • 接下来的3个字节是机器标识码
  • 紧接的2个字节由进程id组成(PID)
  • 最后3个字节是随机数。

 

1.10二进制数据

二进制数据是任意字节的字符串,不能通过shell操作。如果要将非utf8字符串存入数据库,那么使用二进制数据是唯一的方法。

1.11代码

MongoDB还可以在查询和文档中存储任意的JavaScript代码。

 

2.增加数据

在MongoDB中插入数据就是插入一个文档,而文档是存储在集合中的,集合又是存储在数据库中的。

2.1插入单条数据

插入数据时需要指定存储文档的集合,然后通过insertOne()方法插入单条数据。

插入文档时如果没有提供_id键,MongoDB会自动添加该键,并通过ObjectId()方法生成对应的值。

2.2插入多条数据

如果要向一个集合中插入多个文档,那么可以使用insertMany方法。在MongoDB中是推荐使用批量导入数据的,这种方式效率高。

多个文档是存储在列表中的。

当进行批量数据插入时会存在部分数据插入失败的情况,这个时候MongoDB有两种策略,一种当出现错误后,停止插入后面的所有数据。另一种策略是或略出错的记录,继续插入其他不出错的记录。

执行哪一种策略是由,该方法的ordered参数决定的,当ordered为true时(默认),执行第一种策略,为false是执行第二种策略。

3.删除数据

MongoDB删除数据时可以分为两种,一种是删除单条数据,另外一种是删除多条数据。

3.1删除单条数据

MongoDB中删除单条数据,是通过deleteOne()方法进行操作的。当满足过滤条件的数据有多条时,MongoDB将删除第一条数据。

实例中我们发现job为student的有两条记录。

 当执行删除一条记录后,我们发现只剩下第二条记录了。

3.2删除多条数据

当我们想删除所有满足过滤条件的记录时,我们就需要使用deleteMany()方法进行操作。

通过查询发现test集合中存在两条name为jack2的记录,这里我们通过删除多条记录的方法将满足该条件的记录都删除。

3.3删除整个集合数据

删除整个集合数据有两种方式,一种是通过deleteMany({})这种方式,还有一种是通过集合的drop方法。

通常删除整个集合数据drop方法更加快捷高效。

4.修改数据

4.1文档替换

用新的文档完全替换匹配的文档,通过replaceOne()方法实现。replaceOne方法也是只会替换一条记录。

test集合中有这样三条记录。

通过替换后,记录的结构发生改变。原来的文档结构被完全替换。

 

4.2更新单条数据

更新单条数据使用的方法是updateOne(),它只会更新满足过滤条件的第一条记录,并且它更新的内容是针对源记录中修改某个键的值,或者添加一个新的键值对,或者删除某个键。

当更新数据的时候,通常还需要使用到更新运算符(指定更新记录的方式),才能完成对数据的更新。

更新运算符运算符说明
$inc用来修改已存在的键值或者在该键不存在时创建它。只能作用于数值类型数据。
$set用来设置一个字段的值。如果这个字段不存在,则创建该字段。
$unset删除某个键
$push针对值为数组类型的键,用于将元素添加到数组末尾。如果数组不存在,则会创建一个新的数组。
$each和$push共同使用表示,将$each键对应的多个值批量插入数组末尾。
$slice用来限制数组的长度
$sort用于排序
$ne表示不相等
$addToSet表示将列表当作集合进行使用
$pop如果将数组是为队列或栈,使用$pop从某一端删除元素。1表示末尾,-1表示头部
$pull用于删除与给定条件匹配的数组元素。删除所有匹配的文档
下标定位数组中元素的位置
$根据筛选条件定位到数组中元素的位置,只能匹配第一个匹配到的元素。
arrayFilters使我们能够修改与特定条件匹配的数组元素。
upsert如果找不到与筛选条件相匹配的文档,则会以这个条件和更新文档为基础来创建一个新的文档;如果找到了匹配的文档,则进行正常的更新。

加粗的为更改类型,其他的都是一些辅助的参数。

增加score键值:

 增加chinese键的数值:

想score键中一次添加多个数值 

 

4.3更新多条数据

更新多条数据使用的方法是updateMany(),它的用法和updateOne()方法类似,只不过其作用的范围不同。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习_程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值