作為非關系型數據庫中的佼佼者,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
中值為平凡的世界
的數據已經被刪除掉了