天天看點

MongoDB 内嵌文檔

MongoDB是文檔型的資料庫系統,doc是MongoDB的資料機關,每個doc相當于關系型資料庫的資料行(row),doc和row的差別在于field的原子性:row中的column是不和分割的原子對象,而doc中的field可以是原子對象,也可以是内嵌doc(embedded doc),數組等資料類型。内嵌doc中所有field的Key不允許重複。

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

<a></a>

一,查詢内嵌文檔

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。

2,限制傳回的doc的field

示例,使用find的第二個參數Projection doc,隻傳回兩個field:name 字段和内嵌doc的email字段。通過dot notation,将内嵌doc中的某些字段傳回,格式是:embedded_doc.field:1,表示傳回該字段,embedded_doc.field:0,表示不傳回該字段。

二,修改内嵌doc

upsert 選項非常有用,如果目前的doc中不存在内嵌文檔,通過$set modifier 來增加;如果目前的doc中存在内嵌文檔,通過$set modifier來修改内嵌文檔的值。

1,修改doc,增加内嵌doc

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

2,修改内嵌doc中的字段

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

三,删除doc中的内嵌doc

$unset modifier能夠删除doc中的字段,使用格式:{$unset:{field1:"", field2:""}},将删除的字段放在$unset文檔中。

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

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

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

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

MongoDB 内嵌文檔

引用doc:

<a href="https://docs.mongodb.com/manual/reference/operator/update/set/#up._S_set" target="_blank">$set</a>

<a href="https://docs.mongodb.com/manual/reference/operator/update/unset/" target="_blank">$unset</a>

本文版權歸作者和部落格園所有,歡迎轉載,但未經作者同意,必須保留此段聲明,且在文章頁面醒目位置顯示原文連接配接,否則保留追究法律責任的權利。

本文轉自悅光陰部落格園部落格,原文連結:http://www.cnblogs.com/ljhdo/p/5042931.html,如需轉載請自行聯系原作者