MongoDB 如何查詢和修改內嵌文檔

來源:互聯網
上載者:User

標籤:

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:"[email protected]"    }}

--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 如何查詢和修改內嵌文檔

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.