Quantcast
Channel: CodeSection,代码区,数据库(综合) - CodeSec
Viewing all articles
Browse latest Browse all 6262

MongoDB 内嵌文档

$
0
0

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}
)
MongoDB 内嵌文档

引用doc:

$set

$unset

更多 MongoDB 相关教程见以下内容 :

CentOS 编译安装 MongoDB与mongoDB的php扩展 http://www.linuxidc.com/Linux/2012-02/53833.htm

CentOS 6 使用 yum 安装MongoDB及服务器端配置 http://www.linuxidc.com/Linux/2012-08/68196.htm

Ubuntu 13.04下安装MongoDB2.4.3 http://www.linuxidc.com/Linux/2013-05/84227.htm

MongoDB入门必读(概念与实战并重) http://www.linuxidc.com/Linux/2013-07/87105.htm

Ubunu 14.04下MongoDB的安装指南 http://www.linuxidc.com/Linux/2014-08/105364.htm

《MongoDB 权威指南》(MongoDB: The Definitive Guide)英文文字版[PDF] http://www.linuxidc.com/Linux/2012-07/66735.htm

Nagios监控MongoDB分片集群服务实战 http://www.linuxidc.com/Linux/2014-10/107826.htm

基于CentOS 6.5操作系统搭建MongoDB服务http://www.lin uxidc.com/Linux/2014-11/108900.htm

MongoDB 的详细介绍 : 请点这里

MongoDB 的下载地址 : 请点这里

本文永久更新链接地址 : http://www.linuxidc.com/Linux/2016-09/135278.htm


Viewing all articles
Browse latest Browse all 6262

Trending Articles