【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】
生活随笔
收集整理的這篇文章主要介紹了
【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、介紹
??????? MONGODB 的表結構 很靈活 。主要還是因為 字段中可以包含 【 數(shù)組】、【內(nèi)嵌文檔】。
現(xiàn)在簡單介紹一下 字段中的【 數(shù)組】、【內(nèi)嵌文檔】相關的一些操作
(為了方便理解,還是以表來理解mongodb 里的文檔)
數(shù)組1
1、數(shù)組是一組數(shù),可以是有序對象,也可以是無序對象
可以是不同數(shù)據(jù)類型,也可以相同數(shù)據(jù)類型
2、文檔
文檔 可以做為【鍵】的值,這樣的文檔就是內(nèi)嵌文檔,這樣處理的目的是使用數(shù)據(jù)組織更為自然。
如果鍵多時,在每次訪問時只取需要的鍵,而非全部鍵都取。從而優(yōu)化讀取效率。
3、數(shù)組查詢
> db.food.find() { "_id" : 1, "fruit" : [ "apple", "banana", "peach" ] } { "_id" : 2, "fruit" : [ "apple", "kumquat", "orange" ] } { "_id" : 3, "fruit" : [ "cherry", "banana", "apple" ] }3.1 查詢包含”apple”或者”banana”的文檔,則使用”$in”
> db.food.find({fruit:{$in:[" apple “,”banana”]}}) { "_id" : 1, "fruit" : [ "apple", "banana", "peach" ] } { "_id" : 2, "fruit" : [ "apple", "kumquat", "orange" ] } { "_id" : 3, "fruit" : [ "cherry", "banana", "apple" ] }3.2 查詢既包含”apple”并且又包含”banana”的文檔
> db.food.find({fruit:{$all:["apple","banana"]}}) { "_id" : 1, "fruit" : [ "apple", "banana", "peach" ] } { "_id" : 3, "fruit" : [ "cherry", "banana", "apple" ] }3.3 使用”$size“可以查詢指定長度的數(shù)組
我先插入一條新的記錄:
> db.food.insert({fruit:["Watermelon"]})查詢只有一個水果列表的新添加記錄:
查詢有3種水果的記錄:
3.4? 使用 ”$slice“ 指定 返回數(shù)據(jù)中的某幾條數(shù)據(jù)
原數(shù)據(jù)如下:
> db.blog.findOne() { "_id" : 1, "title" : "Hello World", "content" : "My first blog.", "comments" : [{"name" : "joe","content" : "test"},{"name" : "Zhang","content" : "so so .."},{"name" : "Li","content" : "very good"}] } >一條博客里有多條點評。但我要指定返回兩條點評。(
$slice:[1,2] 從[1]開始,取2條 ,數(shù)組序號以0 開始。? )
當然,你也還可以指定顯示特別指定要返回的點評記錄:
如:最后一條點評
前兩條:
3.5 數(shù)組更新、添加
> db.food.insert({_id:4,fruit:['neo4j','mysql','redis']}) > db.food.find({_id:4}) { "_id" : 4, "fruit" : [ "neo4j", "mysql", "redis" ] } > db.food.update({_id:4},{“$pull”:{“fruit”:“neo4j”}}) #刪除指定值 > db.food.find({_id:4}) { "_id" : 4, "fruit" : [ "mysql", "redis" ] } > db.food.update({_id:4},{“$pop”:{“fruit”:1}}) #刪除最后一個值 > db.food.find({_id:4}) { "_id" : 4, "fruit" : [ "mysql" ] } > db.food.update({_id:4},{“$push”:{“fruit”:“mongo”}}) #添加一個值 > db.food.find({_id:4}) { "_id" : 4, "fruit" : [ "mysql", "mongo" ] } >3.6 內(nèi)嵌子文檔查詢
這個用得比較多,大家也很熟悉,就象對象引用是一樣的。多層間使用“." 但如果層次越來越多,在查詢,更新時。就會越來越不方便了。容易出錯。
內(nèi)嵌子文檔查詢 > db.tst_3layer.find() { "_id" : 1, "po" : { "prod" : { "_id" : 1, "name" : "mongobook" }, "qty" : 1, "price" : 10, "amount" : 10 } } { "_id" : 2, "po" : { "prod" : { "_id" : 2, "name" : "oracle book" }, "qty" : 2, "price" : 230, "amount" : 460 } }> db.tst_3layer.find({"po.prod._id":1}) { "_id" : 1, "po" : { "prod" : { "_id" : 1, "name" : "mongobook" }, "qty" : 1, "price" : 10, "amount" : 10 } } >
總結
以上是生活随笔為你收集整理的【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【知识小课堂】 mongodb 之 o
- 下一篇: 【知识小课堂】mongodb 之 查询关