Mongo学习笔记——数组操作

Mongo学习笔记——数组操作

在MongoDB中,数据被存储为一个文档,数据结构有键值对组成。在文档中可以存储一个Object数组,本次就来了解如何对此类数组进行操作。

现有数据如下:
Mongo学习笔记——数组操作_第1张图片

以上是一个个人信息文档,而一个人可以学到的技能是会变化的。当需要增加一个技能:

db.getCollection('applicant').update({"_id" : ObjectId("5ba993cc929a972684cdb2a5")},{$push:{"skill":{"skill_exp":"了解","skill_name":"C"}}})

Mongo学习笔记——数组操作_第2张图片
$push的作用就是向已有的数组加入一个元素,不过push是不会检查是否有重复数据的,所以如果用push多次增加,相同的数据也会被重复存储。若是想要避免这种现象,就需要使用 $addToSet。

db.getCollection('applicant').update({"_id" : ObjectId("5ba993cc929a972684cdb2a5")},{$addToSet:{"skill":{"skill_exp":"了解","skill_name":"C"}}})

结果如下:
Mongo学习笔记——数组操作_第3张图片
并没有出现多个C的技能描述。

而在对数组进行删除操作时,也有两种方式,分别是$pop和 $pull。
$pop:

db.getCollection('applicant').update({"_id" : ObjectId("5ba993cc929a972684cdb2a5")},{$pop:{"skill":1}})

$pull:

db.getCollection('applicant').update({"_id" : ObjectId("5ba993cc929a972684cdb2a5")},{$pull:{"skill":{"skill_exp":"了解","skill_name":"C"}}})

结果如下:
Mongo学习笔记——数组操作_第4张图片
这两者的区别在于$pop是在数组的尾部与头部进行删除,而 $pull则是进行匹配删除(注意:pull不是只删除一条,他会删除所有匹配的元素)。

当需要对数组的部分值进行更新,则需要使用定位操作符:$

db.getCollection('applicant').update({$and:[{"_id" : ObjectId("5ba993cc929a972684cdb2a5")},{"skill.skill_name" : "C#"}]},{$set:{"skill.$.skill_exp":"熟悉"}})

结果如下:
Mongo学习笔记——数组操作_第5张图片

你可能感兴趣的:(Mongo学习笔记——数组操作)