Mongodb数据库中修改器$push和$addToSet的相同点和不同点

Mongodb数据库中修改器$push$addToSet的相同点和不同点


对于Mongodb数据库而言,数据的修改会牵扯到内容的变更,结构的变更(数组的变更),所以Mongodb数据库设计的时候就提供了一系列修改器的应用。下面是我理解并总结的的其中两个修改器的相同点和不同点。

1.相同点

  1. $push表示向指定的成员中追加内容(基本上都是数组),
    语法结构为:${'$push':{'成员':内容}}
    范例:向姓名为小七学生的课程中增加美术课程

    db.students.update({"name":"小七"},{"$push":{"course":"美术"}})

    在进行数据修改前,先查看姓名为小七的数据:

    db.students.find({"name":"小七"}).pretty()

    结果显示如下:
    小七的数据查询
    然后执行修改数据操作
    修改后的小七的数据
    可以看见原先小七数据中没有课程,执行修改操作后多了course数据。就说明,如果没有数组就重新创建数组。那么如果有数组后再执行操作了?

    db.students.update({"name":"小七"},{"$push":{"course":"舞蹈"}})

    这里写图片描述
    可以看出如果有,就直接数组内追加数据内容。
    那么如果添加的内容是一个数组呢,又会出现什么样的结果?

    db.students.update({"name":"小七"},{"$push":{"course":["数学","音乐"]}})

    这里写图片描述
    可以看到直接将数组追加到了课程中。

  2. $addToSet也表示向指定的成员中追加内容(与$push相似)。
    语法结构:${"$addToSet":{"成员":内容}}
    如果执行以上代码,其结构是一样的,大家可以自己试试。

2.不同点

但是两者是有区别的,$push是不进行数据过滤的,而$addToSet是进行数据过滤,简单的说就是$push不管你有没有,只要执行,就将内容追加到数组后面,而$addToSet看数组中有没有要追加的内容,如果有就不再追加,如果没有就进行追加。

为了方便看结果,先执行下面代码

db.students.update({"name":"小七"},{"$addToSet":{"course":"美术"}})

$addToSet后结果
可以看到执行代码后,数据内容没有在数组中追加,获取有人会说是不是$addToSet不管用呢,那么再执行下面的代码,看结果

db.students.update({"name":"小七"},{"$addToSet":{"course":"音乐"}})

这里写图片描述
可以看到数据追加到数组中。
接下来执行$push代码

db.students.update({"name":"小七"},{"$push":{"course":"美术"}})

这里写图片描述
可以看到之前小七的课程中就有美术课程,但执行了$push代码后,依然将美术课程追加到课程数组后。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值