MongoDB 内嵌文档

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

MongoDB是文档型的数据库系统,doc是MongoDB的数据单位,每个doc相当于关系型数据库的数据行(row),doc和row的区别在于field的原子性:row中的column是不和分割的原子对象,而doc中的field可以是原子对象,也可以是内嵌doc(embedded doc),数组等数据类型。内嵌doc中所有field的Key不允许重复。

例如以下doc,contact 字段是内嵌doc。

复制代码
oneDoc=
{
name:"t1",
age:21,
contact:
    {
        phone:123,
        email:"xx@microsoft.com"
    }
}

--Insert a doc
db.foo.insert(OneDoc)
复制代码

一,查询内嵌文档
1,如果内嵌doc存在field满足query filter,那么将doc返回。在引用内嵌doc中的field时,使用 dot notation,格式是:embedded_doc.field:value,如果内嵌doc的field也是内嵌文档,依次类推,embedded_doc1.embedded_doc2.field:value。

示例,查询contact 字段中phone是123的所有doc。

 db.foo.find({"contact.phone":123})

2,限制返回的doc的field
示例,使用find的第二个参数Projection doc,只返回两个field:name 字段和内嵌doc的email字段。通过dot notation,将内嵌doc中的某些字段返回,格式是:embedded_doc.field:1,表示返回该字段,embedded_doc.field:0,表示不返回该字段。

db.foo.find({"contact.phone":123},{_id:0,"contact.email":1,name:1})

二,修改内嵌doc

upsert 选项非常有用,如果当前的doc中不存在内嵌文档,通过$set modifier 来增加;如果当前的doc中存在内嵌文档,通过$set modifier来修改内嵌文档的值。

1,修改doc,增加内嵌doc

示例,增加address字段,这是内嵌doc

db.foo.updateMany(
{name:"t1"},
{$set:{address:{province:"henan",city:"xinyang"}}},
{upsert:true}
)

2,修改内嵌doc中的字段
示例,修改内嵌doc中province 和 city 字段的内容,全部修改为"shanghai"

db.foo.updateMany(
{name:"t1"},
{$set:{address:{province:"shanghai",city:"shanghai"}}},
{upsert:true}
)

三,删除doc中的内嵌doc
$unset modifier能够删除doc中的字段,使用格式:{$unset:{field1:"", field2:""}},将删除的字段放在$unset文档中。

1,如果要删除内嵌doc中的field或数组中的元素,可以使用dot notation。

示例,删除address内嵌doc中的province 字段

db.foo.updateMany(
{name:"t1"},
{$unset:{"address.province":""}},
{upsert:true}
)

2,如果不使用dot notation,那么删除的将是整个内嵌doc

示例,在$unset modifier中,使用address 内嵌doc 格式,那么将删除address field。

db.foo.updateMany(
{name:"t1"},
{$unset:{address:{province:"shanghai"}}},
{upsert:true}
)

 

引用doc:

$set

$unset

 

作者悦光阴
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
分类: MongoDB





本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/5042931.html,如需转载请自行联系原作者
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
5天前
|
存储 JSON NoSQL
MongoDB的文档存储格式BSON和JSON的区别
MongoDB的文档存储格式BSON和JSON的区别
|
2月前
|
SQL NoSQL Java
文档型数据库MongoDB
文档型数据库MongoDB
|
3月前
|
存储 JSON NoSQL
【MongoDB】<文档型数据库>Windows&Liunx安装MongoDB(无错完整)
【1月更文挑战第26天】【MongoDB】<文档型数据库>Windows&Liunx安装MongoDB(无错完整)
|
8月前
|
存储 NoSQL MongoDB
MongoDB-文档之间关系
MongoDB对于文档的格式并没有强制性的要求, 但不等于我们不能在文档中表达数据的关系,在MongoDB中我们可以通过 ‘内嵌式结构’ 和 ‘规范式结构’ 来表达文档之间的关系。
55 0
|
4月前
|
NoSQL JavaScript 前端开发
MongoDB【CRUD练习-条件查询-文档关系】
MongoDB【CRUD练习-条件查询-文档关系】
|
8月前
|
SQL NoSQL 关系型数据库
mongoDB常用的操作 -(文档)
mongoDB常用的操作 -(文档)
46 0
|
9月前
|
存储 JSON NoSQL
MongoDB 插入文档
MongoDB 插入文档
57 0
|
9月前
|
SQL NoSQL MongoDB
MongoDB 更新文档
MongoDB 更新文档
32 0
|
9月前
|
NoSQL MongoDB 数据库
MongoDB 更新文档2
MongoDB 更新文档2
39 0
|
XML JSON 资源调度
MongoDB(二)——备份还原,mongoose,接口,apidoc文档
是node中提供操作MongoDB的模块 能够通过node语法实现MongoDB数据库增删改查 实现用node写程序来管理MongoDB数据库‘ 可以通过执行 npm i mongoose或 yarn add mongoose的命令安装
427 0
MongoDB(二)——备份还原,mongoose,接口,apidoc文档