龙猫不热

导航

MongoDB查询或修改内嵌文档

作为非关系型数据库中的佼佼者,MongoDB一大优势在于能够在一条文档中存储对象类型的数据,适当增加冗余来让数据库更好用。文档中一个对象类型的字段在MongoDB中被称为内嵌文档(Embedded)

查询内嵌文档

如果要通过内嵌文档来对文档进行查询, 此时属性名必须使用引号

示例:

db.col.find({"hobby.movies":"超脱"}).pretty()

查询结果
![在这里插入图片描述]( https://img-blog.csdnimg.cn/2f439b005b95420d9bc62047d5fc288a.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTQ4MjIy,size_16,color_FFFFFF,t_70)

修改内嵌文档

向内嵌文档添加值

向内嵌文档添加值需要使用到 一个数组更新操作符
$push: 用于向数组中追加值

示例: 环境同上, 向内嵌文档movies中添加 平凡的世界, 代码如下:

	db.col.update({name:"龙猫不热"},{$push:{"hobby.movies":"平凡的世界"}})

返回结果
return: WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

再次查询
![在这里插入图片描述]( https://img-blog.csdnimg.cn/3bef1e79e99b4d739fd699fd80e7a1e0.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTQ4MjIy,size_16,color_FFFFFF,t_70)

注意: 现在movies中已经有了平凡的世界这个值了, 现在如果我们再运行一遍, 那么会在后面继续重复添加
![在这里插入图片描述]( https://img-blog.csdnimg.cn/dfb1c7301a9f40518454272176433524.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTQ4MjIy,size_16,color_FFFFFF,t_70)

如果我们需要让movies中的值不重复, 那么需要使用到一个新的操作符
$addToSet: 向数组中添加一个新元素, 如果数组中已经存在了该元素, 则不会添加

修改代码:
db.col.update({name:"龙猫不热"},{$addToSet:{"hobby.movies":"平凡的世界"}})
运行后显示修改为0
在这里插入图片描述
数组中也没有再添加一遍平凡的世界
![在这里插入图片描述]( https://img-blog.csdnimg.cn/c4c36f644e24484aa8e0694a1c602cbc.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTQ4MjIy,size_16,color_FFFFFF,t_70)

删除内嵌文档中指定的值

使用操作符 $pull
$pull: 数组中符合条件的值将被删除
> db.col.update({name:"龙猫不热"},{$pull:{"hobby.movies":"平凡的世界"}})))))

![在这里插入图片描述]( https://img-blog.csdnimg.cn/c4c3642c82dc409d8e5cf142ec26cbc6.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1OTQ4MjIy,size_16,color_FFFFFF,t_70)
运行代码后可以看出movies中值为平凡的世界的数据已经被删除掉了

posted on 2021-08-15 01:52  龙猫不热  阅读(698)  评论(0)    收藏  举报