亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MongoDB > 正文

MongoDB教程之查詢操作實例

2020-10-29 18:51:52
字體:
來源:轉載
供稿:網友

1.  基本查詢:

    構造查詢數據。
 

復制代碼 代碼如下:

    > db.test.findOne()
    {
         "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"),
         "name" : "stephen",
         "age" : 35,
         "genda" : "male",
         "email" : "stephen@hotmail.com"
    }
 
    --多條件查詢。下面的示例等同于SQL語句的where name = "stephen" and age = 35
    > db.test.find({"name":"stephen","age":35})
    { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35, "genda" : "male", "email" : "stephen@hotmail.com" }
 
    --返回指定的文檔鍵值對。下面的示例將只是返回name和age鍵值對。
    > db.test.find({}, {"name":1,"age":1})
   { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35 }

 

    --指定不返回的文檔鍵值對。下面的示例將返回除name之外的所有鍵值對。
    > db.test.find({}, {"name":0})
    { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "age" : 35, "genda" : "male", "email" : "stephen@hotmail.com" }
 


2.  查詢條件:

    MongoDB提供了一組比較操作符:$lt/$lte/$gt/$gte/$ne,依次等價于</<=/>/>=/!=。
 

復制代碼 代碼如下:

    --下面的示例返回符合條件age >= 18 && age <= 40的文檔。
    > db.test.find({"age":{"$gte":18, "$lte":40}})
    { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35,"genda" : "male", "email" : "stephen@hotmail.com" }
 
    --下面的示例返回條件符合name != "stephen1"
    > db.test.find({"name":{"$ne":"stephen1"}})
    { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35,"genda" : "male", "email" : "stephen@hotmail.com" }
 
    --$in等同于SQL中的in,下面的示例等同于SQL中的in ("stephen","stephen1")
    > db.test.find({"name":{"$in":["stephen","stephen1"]}})
    { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35,"genda" : "male", "email" : "stephen@hotmail.com" } 
 
    --和SQL不同的是,MongoDB的in list中的數據可以是不同類型。這種情況可用于不同類型的別名場景。
    > db.test.find({"name":{"$in":["stephen",123]}})
    { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35,"genda" : "male", "email" : "stephen@hotmail.com" }
 
    --$nin等同于SQL中的not in,同時也是$in的取反。如:
    > db.test.find({"name":{"$nin":["stephen2","stephen1"]}})
    { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35,"genda" : "male", "email" : "stephen@hotmail.com" }
 
    --$or等同于SQL中的or,$or所針對的條件被放到一個數組中,每個數組元素表示or的一個條件。
    --下面的示例等同于name = "stephen1" or age = 35
    > db.test.find({"$or": [{"name":"stephen1"}, {"age":35}]})
    { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35,"genda" : "male", "email" : "stephen@hotmail.com" }
 
    --下面的示例演示了如何混合使用$or和$in。
    > db.test.find({"$or": [{"name":{"$in":["stephen","stephen1"]}}, {"age":36}]})
    { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35,"genda" : "male", "email" : "stephen@hotmail.com" }
 
    --$not表示取反,等同于SQL中的not。
    > db.test.find({"name": {"$not": {"$in":["stephen2","stephen1"]}}})
    { "_id" : ObjectId("4fd58ecbb9ac507e96276f1a"), "name" : "stephen", "age" : 35,"genda" : "male", "email" : "stephen@hotmail.com" }

 

3.  null數據類型的查詢:

復制代碼 代碼如下:

    --在進行值為null數據的查詢時,所有值為null,以及不包含指定鍵的文檔均會被檢索出來。
    > db.test.find({"x":null})
    { "_id" : ObjectId("4fd59d30b9ac507e96276f1b"), "x" : null }
    { "_id" : ObjectId("4fd59d49b9ac507e96276f1c"), "y" : 1 }
 
    --需要將null作為數組中的一個元素進行相等性判斷,即便這個數組中只有一個元素。
    --再有就是通過$exists判斷指定鍵是否存在。
    > db.test.find({"x": {"$in": [null], "$exists":true}})
    { "_id" : ObjectId("4fd59d30b9ac507e96276f1b"), "x" : null }
 

4.  正則查詢:
復制代碼 代碼如下:

    --MongoDB中使用了Perl規則的正則語法。如:
    > db.test.find()
    { "_id" : ObjectId("4fd59ed7b9ac507e96276f1d"), "name" : "stephen" }
    { "_id" : ObjectId("4fd59edbb9ac507e96276f1e"), "name" : "stephen1" }
    --i表示忽略大小寫
    > db.test.find({"name":/stephen?/i})
    { "_id" : ObjectId("4fd59ed7b9ac507e96276f1d"), "name" : "stephen" }
    { "_id" : ObjectId("4fd59edbb9ac507e96276f1e"), "name" : "stephen1" }
 

5.  數組數據查詢:
復制代碼 代碼如下:

    --基于數組的查找。
    > db.test.find()
    { "_id" : ObjectId("4fd5a177b9ac507e96276f1f"), "fruit" : [ "apple", "banana", "peach" ] }
    { "_id" : ObjectId("4fd5a18cb9ac507e96276f20"), "fruit" : [ "apple", "kumquat","orange" ] }
    { "_id" : ObjectId("4fd5a1f0b9ac507e96276f21"), "fruit" : [ "cherry", "banana","apple" ] }
    --數組中所有包含banana的文檔都會被檢索出來。
    > db.test.find({"fruit":"banana"})
    { "_id" : ObjectId("4fd5a177b9ac507e96276f1f"), "fruit" : [ "apple", "banana", "peach" ] }
    { "_id" : ObjectId("4fd5a1f0b9ac507e96276f21"), "fruit" : [ "cherry", "banana","apple" ] }
    --檢索數組中需要包含多個元素的情況,這里使用$all。下面的示例中,數組中必須同時包含apple和banana,但是他們的順序無關緊要。
    > db.test.find({"fruit": {"$all": ["banana","apple"]}})
    { "_id" : ObjectId("4fd5a177b9ac507e96276f1f"), "fruit" : [ "apple", "banana", "peach" ] }
    { "_id" : ObjectId("4fd5a1f0b9ac507e96276f21"), "fruit" : [ "cherry", "banana", "apple" ] }
    --下面的示例表示精確匹配,即被檢索出來的文檔,fruit值中的數組數據必須和查詢條件完全匹配,即不能多,也不能少,順序也必須保持一致。
    > db.test.find({"fruit":["apple","banana","peach"]})
    { "_id" : ObjectId("4fd5a177b9ac507e96276f1f"), "fruit" : [ "apple", "banana", peach" ] }
    --下面的示例將匹配數組中指定下標元素的值。數組的起始下標是0。
    > db.test.find({"fruit.2":"peach"})
    { "_id" : ObjectId("4fd5a177b9ac507e96276f1f"), "fruit" : [ "apple", "banana", peach" ] }
    --可以通過$size獲取數組的長度,但是$size不能和比較操作符聯合使用。
    > db.test.find({"fruit": {$size : 3}})
    { "_id" : ObjectId("4fd5a177b9ac507e96276f1f"), "fruit" : [ "apple", "banana", "peach" ] }
    { "_id" : ObjectId("4fd5a18cb9ac507e96276f20"), "fruit" : [ "apple", "kumquat","orange" ] }
    { "_id" : ObjectId("4fd5a1f0b9ac507e96276f21"), "fruit" : [ "cherry", "banana","apple" ] }
    --如果需要檢索size > n的結果,不能直接使用$size,只能是添加一個額外的鍵表示數據中的元素數據,在操作數據中的元素時,需要同時更新size鍵的值。
    --為后面的實驗構造數據。
    > db.test.update({}, {"$set": {"size":3}},false,true)
    > db.test.find()
    { "_id" : ObjectId("4fd5a18cb9ac507e96276f20"), "fruit" : [ "apple", "kumquat", "orange" ], "size" : 3 }
    { "_id" : ObjectId("4fd5a1f0b9ac507e96276f21"), "fruit" : [ "cherry", "banana", "apple" ], "size" : 3 }
    --每次添加一個新元素,都要原子性的自增size一次。
    > test.update({},{"$push": {"fruit":"strawberry"},"$inc":{"size":1}},false,true)
    > db.test.find()
    { "_id" : ObjectId("4fd5a18cb9ac507e96276f20"), "fruit" : [ "apple", "kumquat", "orange", "strawberry" ], "size" : 4 }
    { "_id" : ObjectId("4fd5a1f0b9ac507e96276f21"), "fruit" : [ "cherry", "banana", "apple", "strawberry" ], "size" : 4 }
    --通過$slice返回數組中的部分數據。"$slice":2表示數組中的前兩個元素。
    > db.test.find({},{"fruit": {"$slice":2}, "size":0})
    { "_id" : ObjectId("4fd5a18cb9ac507e96276f20"), "fruit" : [ "apple", "kumquat" ]}
    { "_id" : ObjectId("4fd5a1f0b9ac507e96276f21"), "fruit" : [ "cherry", "banana" ]}
    --通過$slice返回數組中的部分數據。"$slice":-2表示數組中的后兩個元素。
    > db.test.find({},{"fruit": {"$slice":-2}, "size":0})
    { "_id" : ObjectId("4fd5a18cb9ac507e96276f20"), "fruit" : [ "orange", "strawberry" ] }
    { "_id" : ObjectId("4fd5a1f0b9ac507e96276f21"), "fruit" : [ "apple", "strawberry" ] }
    --$slice : [2,1],表示從第二個2元素開始取1個,如果獲取數量大于2后面的元素數量,則取后面的全部數據。
    > db.test.find({},{"fruit": {"$slice":[2,1]}, "size":0})
    { "_id" : ObjectId("4fd5a18cb9ac507e96276f20"), "fruit" : [ "orange" ] }
    { "_id" : ObjectId("4fd5a1f0b9ac507e96276f21"), "fruit" : [ "apple" ] }
 

6.  內嵌文檔查詢:
復制代碼 代碼如下:

    --為后面的示例構造測試數據。
    > db.test.find()
    { "_id" : ObjectId("4fd5ada3b9ac507e96276f22"), "name" : { "first" : "Joe", "last" : "He" }, "age" : 45 }
    --當嵌入式文檔為數組時,需要$elemMatch操作符來幫助定位某一個元素匹配的情況,否則嵌入式文件將進行全部的匹配。
    --即檢索時需要將所有元素都列出來作為查詢條件方可。
    > db.test.findOne()
    {
         "_id" : ObjectId("4fd5af76b9ac507e96276f23"),
         "comments" : [
                 {
                         "author" : "joe",
                         "score" : 3
                 },
                 {
                         "author" : "mary",
                         "score" : 6
                 }
         ]
    }
    > db.test.find({"comments": {"$elemMatch": {"author":"joe","score":{"$gte":3}}}}
    { "_id" : ObjectId("4fd5af76b9ac507e96276f23"), "comments" : [ { "author" : "joe", "score" : 3 }, { "author" : "mary", "score" : 6 } ] }
 

7.  游標:

    數據庫使用游標來返回find()的執行結果,客戶端對游標可以進行有效的控制,如:限定結果集的數量、跳過部分結果、基于任意鍵的任意方向的排序等。
    下面的例子將用于準備測試數據。

復制代碼 代碼如下:

    > db.testtable.remove()
    > for (i = 0; i < 10; ++i) {
    ... db.testtable.insert({x:i})
    ... }

    我們可以通過cursor提供的hasNext()方法判斷是否還有未讀取的數據,再通過next()方法讀取結果集中的下一個文檔。如:
 
復制代碼 代碼如下:

    > var c = db.testtable.find()
    > while (c.hasNext()) {
    ... print(c.next().x)
    ... }
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
 

    當調用find()的時候,shell并不立即查詢數據庫,而是等待真正開始要求獲得結果的時候才發送查詢,這樣在執行之前可以給查詢附加額外的選項。幾乎所有的游標方法都返回本身,因此可以像下面這樣將游標的方法鏈式組合起來。如:
 
復制代碼 代碼如下:

    > var c1 = db.testtable.find().sort({"x":1}).limit(1).skip(4);
    > var c2 = db.testtable.find().limit(1).sort({"x":1}).skip(4);
    > var c3 = db.testtable.find().skip(4).limit(1).sort({"x":1});
 

    此時,查詢并未執行,所有這些函數都是在構造查詢,當執行下面的語句時,查詢將被真正執行,
 
復制代碼 代碼如下:

    > c.hasNext()
 

    查詢被發送到服務器,MongoDB服務器每次將返回一批數據,當本批被全部迭代后再從服務器讀取下一批數據,直至查詢結果需要的數據被全部迭代。
 
    對于上面的示例,limit(1)表示輸出結果僅為一個,如果小于1,則不輸出,即limit(n)函數限定的是最多輸出結果。skip(4)表示跳過查詢結果中的前4個文檔,如果結果小于4,則不會返回任何文檔。sort({"x":1})用于設定排序條件,即按照x鍵以升序(1)的方式排序,如果需要降序排序可以改為:sort({"x":-1})。sort也可以支持多鍵排序,如:sort({username:1, age:-1})即先按照username進行升序排序,如果username的值相同,再以age鍵進行降序排序。這里需要指出的是,如果skip過多的文檔,將會導致性能問題。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美一区二区三区视频| 日韩精品极品毛片系列视频| 国产精品美女在线观看| y97精品国产97久久久久久| 国产精品户外野外| 亚洲欧洲日产国码av系列天堂| 精品一区精品二区| 久久国内精品一国内精品| 午夜精品蜜臀一区二区三区免费| 91在线播放国产| 日韩中文字幕精品| 欧美激情在线播放| 成人激情视频在线观看| 热99精品里视频精品| 国产一区二区三区三区在线观看| 欧美在线激情网| 日韩欧美亚洲一二三区| 久久久综合免费视频| 国产精品91一区| zzjj国产精品一区二区| 色综合天天综合网国产成人网| 久久777国产线看观看精品| 91大神在线播放精品| 午夜精品国产精品大乳美女| 欧美激情精品久久久久久免费印度| 国产精品第七十二页| 中文字幕久久久| 久久精品久久精品亚洲人| 一区二区三区 在线观看视| 日本人成精品视频在线| 久久97久久97精品免视看| 91大神在线播放精品| 亚洲第五色综合网| 久久精品久久久久| 国产亚洲视频中文字幕视频| 在线看片第一页欧美| 91免费视频网站| 日韩成人激情视频| 亚洲欧洲日产国产网站| 欧美国产日韩一区| 亚洲精品电影久久久| 都市激情亚洲色图| 久久久精品一区二区三区| 国产一区二区三区免费视频| 中文字幕综合在线| 国精产品一区一区三区有限在线| 欧美丝袜一区二区| 亚洲石原莉奈一区二区在线观看| 伊人久久精品视频| 日韩国产精品视频| 国产精品wwww| 久久久久五月天| 国产精品青草久久久久福利99| 97久久超碰福利国产精品…| 欧美成aaa人片在线观看蜜臀| 久久91亚洲精品中文字幕奶水| 亚洲a∨日韩av高清在线观看| 色噜噜狠狠狠综合曰曰曰88av| 欧美美最猛性xxxxxx| 亚洲一级片在线看| 亚洲自拍偷拍视频| 日韩中文有码在线视频| 欧洲永久精品大片ww免费漫画| 欧洲成人在线视频| 久久久精品一区二区三区| 国产成人精品久久二区二区| 97婷婷大伊香蕉精品视频| 国产免费一区二区三区在线能观看| 国产精品视频不卡| 欧美肥老太性生活视频| 精品久久久久久久久久久久| 69av视频在线播放| 欧美一区二区三区四区在线| 欧美日韩中国免费专区在线看| www.亚洲免费视频| 亚洲毛片在线免费观看| 中文字幕亚洲无线码在线一区| 成人国产精品日本在线| 亚洲国产天堂久久综合网| 亚洲二区中文字幕| 亚洲国内高清视频| 亚洲激情电影中文字幕| 亚洲欧美成人网| 成人精品久久av网站| 欧美成人免费小视频| 亚洲伦理中文字幕| 亚洲色图五月天| 黑人巨大精品欧美一区二区免费| 日韩av资源在线播放| 日韩精品福利网站| 欧美专区在线观看| 在线观看日韩视频| 精品亚洲一区二区三区| 日韩精品在线第一页| 国产91精品久久久久| 超碰91人人草人人干| 欧美与欧洲交xxxx免费观看| 一区二区欧美激情| 中文在线资源观看视频网站免费不卡| 精品网站999www| 国产精品久久久久久久久久久久久久| 日韩免费在线播放| 在线看欧美日韩| 国产精品久久激情| 久久久久久久久久久网站| 亚洲欧美在线播放| 日韩中文字幕在线视频| 久久这里有精品视频| 国产亚洲精品久久久久久牛牛| 91精品久久久久久久久不口人| 中文字幕综合一区| 精品视频偷偷看在线观看| 亚洲一区二区三区成人在线视频精品| 亚洲欧美国产高清va在线播| 久久久久亚洲精品国产| 亚洲国产精品久久久久秋霞不卡| 最近中文字幕mv在线一区二区三区四区| 91沈先生在线观看| 亚洲免费精彩视频| 日本韩国在线不卡| 国产精品第七影院| 色七七影院综合| 欧美精品一本久久男人的天堂| 成人激情视频在线播放| 亚洲国产古装精品网站| 最近2019免费中文字幕视频三| 日韩精品在线观看一区| 亚洲影视九九影院在线观看| 国产91精品网站| 热re99久久精品国产66热| 91九色综合久久| 亚洲国产中文字幕在线观看| 亚洲国产精品va在看黑人| 国产一区二区三区毛片| 亚洲乱码av中文一区二区| 成人国产精品久久久久久亚洲| 亚洲伊人久久综合| 欧美性69xxxx肥| 69视频在线免费观看| 国产日产久久高清欧美一区| 成人午夜在线观看| 国产精品1234| 久久躁狠狠躁夜夜爽| 97热在线精品视频在线观看| 欧洲成人午夜免费大片| 亚洲嫩模很污视频| 国产精品av在线| 91视频免费在线| 亚洲天堂影视av| 日韩网站免费观看高清| 成人精品久久一区二区三区| 国产精品嫩草影院久久久| 日韩av大片免费看| 亚洲国语精品自产拍在线观看| 亚洲国产成人精品电影| 欧美www视频在线观看| 欧美性生交xxxxxdddd| 日韩免费黄色av| 人体精品一二三区| 美女视频久久黄| 亚洲另类图片色| 91影院在线免费观看视频| 成人自拍性视频| 狠狠色狠色综合曰曰|