日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】

發布時間:2024/4/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、介紹

??????? MONGODB 的表結構 很靈活 。主要還是因為 字段中可以包含 【 數組】、【內嵌文檔】。

現在簡單介紹一下 字段中的【 數組】、【內嵌文檔】相關的一些操作


(為了方便理解,還是以表來理解mongodb 里的文檔)

數組1

1、數組

是一組數,可以是有序對象,也可以是無序對象
可以是不同數據類型,也可以相同數據類型

{“things”:[“pie”,3.14]}{name:”Joe”, Age:25, Status:”A”, Groups:[“news”,”sports”]}

2、文檔

文檔 可以做為的值,這樣的文檔就是內嵌文檔,這樣處理的目的是使用數據組織更為自然。

如果鍵多時,在每次訪問時只取需要的鍵,而非全部鍵都取。從而優化讀取效率。


{ name:{first:”John”,last:” Doe”}, Age:23, Address:{street:”nanjing 100#”,city:”Nanchang”,province:”Jiangxi”}, Tel:{tel:”0792-12133232”,mobile:”134232232323”,fax:”0792-243453433”} }

3、數組查詢

> 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“可以查詢指定長度的數組

我先插入一條新的記錄:

> db.food.insert({fruit:["Watermelon"]})

查詢只有一個水果列表的新添加記錄:


> db.food.find({fruit:{$size:1}},{_id:0,fruit:1}) { "fruit" : [ "Watermelon" ] }


查詢有3種水果的記錄:


> db.food.find({fruit:{$size:3}},{_id:0,fruit:1}) { "fruit" : [ "apple", "banana", "peach" ] } { "fruit" : [ "apple", "kumquat", "orange" ] } { "fruit" : [ "cherry", "banana", "apple" ] } >

3.4? 使用 ”$slice“ 指定 返回數據中的某幾條數據

原數據如下:

> 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條 ,數組序號以0 開始。?


> db.blog.findOne({},{"comments":{$slice:[1,2]}}) { "_id" : 1, "title" : "Hello World", "content" : "My first blog.", "comments" : [{"name" : "Zhang","content" : "so so .."},{"name" : "Li","content" : "very good"}] } >

當然,你也還可以指定顯示特別指定要返回的點評記錄:


如:最后一條點評

> db.blog.findOne({},{"comments":{$slice:-1}}) {"_id" : 1,"title" : "Hello World","content" : "My first blog.","comments" : [{"name" : "Li","content" : "very good"}] }

前兩條:

> db.blog.findOne({},{"comments":{$slice:2}}) {"_id" : 1,"title" : "Hello World","content" : "My first blog.","comments" : [{"name" : "joe","content" : "test"},{"name" : "Zhang","content" : "so so .."}] } >

3.5 數組更新、添加

> 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 內嵌子文檔查詢

這個用得比較多,大家也很熟悉,就象對象引用是一樣的。多層間使用“." 但如果層次越來越多,在查詢,更新時。就會越來越不方便了。容易出錯。

內嵌子文檔查詢

> 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 之字段中的【 数组】、【内嵌文档】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。