作为非关系型数据库中的佼佼者,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中值为平凡的世界的数据已经被删除掉了

MongoDB查询或修改内嵌文档的更多相关文章

  1. MongoDB 内嵌文档

    MongoDB是文档型的数据库系统,doc是MongoDB的数据单位,每个doc相当于关系型数据库的数据行(row),doc和row的区别在于field的原子性:row中的column是不和分割的原子 ...

  2. mongodb查询内嵌文档

    mongodb查询内嵌文档   假设有这样一个文档: db.XXX.remove(); db.XXX.insert({"id":1, "members":[{& ...

  3. mongodb内嵌文档的查询

    本文转自:http://blog.163.com/wm_at163/blog/static/1321734902012526103825481/ 1 > db.blog.findOne() { ...

  4. 学习MongoDB 五: MongoDB查询(数组、内嵌文档)(二)

    一.简介 我们上一篇介绍了db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段,我们今天介绍了对数组和内嵌文档的查询操作,尤其是 ...

  5. mongodb内嵌文档的javaapi,增删改查

    数据结构: {"_id" : "000000001",  //Mongodb默认主键 "UID" : "000000001&quo ...

  6. mongodb对数组元素及内嵌文档进行增删改查操作(转)

    from:https://my.oschina.net/132722/blog/168274 比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: &l ...

  7. MongoDB对数组元素及内嵌文档进行增删改查操作

    比如我有一个user类,他包含一个标签属性,这个标签是一个数组,数组里面的元素是内嵌文档,格式如下: {    "_id" : "195861",    &qu ...

  8. MongoDB-4: 查询(二-数组、内嵌文档)

    一.简介 我们上一篇介绍了db.collection.find()可以实现根据条件查询和指定使用投影运算符返回的字段省略此参数返回匹配文档中的所有字段,我们今天介绍了对数组和内嵌文档的查询操作,尤其是 ...

  9. MongoDB内嵌文档操作

    实体定义: [BsonIgnoreExtraElements] public class Person : BaseEntity { public string FirstName { get; se ...

随机推荐

  1. 前端开发入门到进阶第一集【使用sublime快速编写Html和Css】

    1,安装sublime编辑器,下载地址:http://www.sublimetext.com/3 2,要使用sublime的插件机制必须安装package control:https://packag ...

  2. 查看JVM默认参数及微调JVM启动参数

    目录 查看某个JVM进程堆内存信息 微调JVM启动参数 查看JVM的一些默认参数 参考廖雪峰老师的这篇 JVM调优的正确姿势: https://www.liaoxuefeng.com/article/ ...

  3. 微信小程序云开发-列表数据分页加载显示

    一.准备工作 1.创建数据库nums,向数据库中导入108条数据 2.修改数据库表nums的权限 二.新建页面ListPaginated 1.wxml文件 <!-- 显示列表数据 --> ...

  4. Rowid和Rownum

    Rowid和Rownum对于数据库开发人员来说基本很少用到,因为在企业数据库开发中大多都是进行数据批处理,但是对于其他数据库人员来说还是会用到的. rowid和rownum都是虚列,但含义完全不同.r ...

  5. java 日期字符串互相转换

    一.把日期转换成字符串 //获取当前时间  Date date = new Date();   //打印date数据类型  System.out.println(date.getClass().get ...

  6. Cesium加载地形数据只显示半个地球

    Cesium第0级地形包括两个瓦片:0/0/0.terrain,0/1/0.terrain,分别为左半球和右半球(具体参考:https://blog.csdn.net/u013929284/artic ...

  7. vulnhub-DC:1靶机渗透记录

    准备工作 在vulnhub官网下载DC:1靶机https://www.vulnhub.com/entry/dc-1,292/ 导入到vmware 打开kali准备进行渗透(ip:192.168.200 ...

  8. 《手把手教你》系列技巧篇(十一)-java+ selenium自动化测试-元素定位大法之By tag name(详细教程)

    1.简介 按宏哥计划,本文继续介绍WebDriver关于元素定位大法,这篇介绍By ClassName.看到ID,NAME这些方法的讲解,小伙伴们和童鞋们应该知道,要做好Web自动化测试,最好是需要了 ...

  9. Cypress 高级用法系列 一

    1. Multiple Assertions cy .get('[data-cy=task]') .then( item => { expect(item[0]).to.contain.text ...

  10. Apache ActiveMQ(cve-2015-5254)

    影响版本 Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞 复现 使用工具执行命令 工具地址 https://github.com/matthiaskaiser/jmet/re ...