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

查询内嵌文档

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

示例:

  • 在test库中,存在一个col集合,集合中数据如下
    在这里插入图片描述
    要求: 查询hobby中, movies包含 超脱的文档, 查询代码如下:
db.col.find({"hobby.movies":"超脱"}).pretty()

查询结果
在这里插入图片描述

修改内嵌文档

向内嵌文档添加值

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

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

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

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

再次查询
在这里插入图片描述

注意: 现在movies中已经有了平凡的世界这个值了, 现在如果我们再运行一遍, 那么会在后面继续重复添加
在这里插入图片描述

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

修改代码:
db.col.update({name:"龙猫不热"},{$addToSet:{"hobby.movies":"平凡的世界"}})
运行后显示修改为0
在这里插入图片描述
数组中也没有再添加一遍平凡的世界
在这里插入图片描述

删除内嵌文档中指定的值

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

在这里插入图片描述
运行代码后可以看出movies中值为平凡的世界的数据已经被删除掉了

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐