Mongodb数据库中修改器$push
和$addToSet
的相同点和不同点
对于Mongodb数据库而言,数据的修改会牵扯到内容的变更,结构的变更(数组的变更),所以Mongodb数据库设计的时候就提供了一系列修改器的应用。下面是我理解并总结的的其中两个修改器的相同点和不同点。
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":["数学","音乐"]}})
可以看到直接将数组追加到了课程中。$addToSet
也表示向指定的成员中追加内容(与$push
相似)。
语法结构:${"$addToSet":{"成员":内容}}
如果执行以上代码,其结构是一样的,大家可以自己试试。
2.不同点
但是两者是有区别的,$push
是不进行数据过滤的,而$addToSet
是进行数据过滤,简单的说就是$push
不管你有没有,只要执行,就将内容追加到数组后面,而$addToSet
看数组中有没有要追加的内容,如果有就不再追加,如果没有就进行追加。
为了方便看结果,先执行下面代码
db.students.update({"name":"小七"},{"$addToSet":{"course":"美术"}})
可以看到执行代码后,数据内容没有在数组中追加,获取有人会说是不是$addToSet
不管用呢,那么再执行下面的代码,看结果
db.students.update({"name":"小七"},{"$addToSet":{"course":"音乐"}})
可以看到数据追加到数组中。
接下来执行$push
代码
db.students.update({"name":"小七"},{"$push":{"course":"美术"}})
可以看到之前小七的课程中就有美术课程,但执行了$push
代码后,依然将美术课程追加到课程数组后。