MongoDB查询或修改内嵌文档
作为非关系型数据库中的佼佼者,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中值为平凡的世界的数据已经被删除掉了

浙公网安备 33010602011771号