国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - MongoDB - MongoDB教程之查詢操作實例

MongoDB教程之查詢操作實例

2020-04-30 15:49MongoDB教程網 MongoDB

這篇文章主要介紹了MongoDB教程之查詢操作實例,本文講解了基本查詢、查詢條件、null數據類型的查詢、正則查詢、數組數據查詢、內嵌文檔查詢等數據查詢技巧,需要的朋友可以參考下

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過多的文檔,將會導致性能問題。

 

延伸 · 閱讀

精彩推薦
  • MongoDBmongodb基本命令實例小結

    mongodb基本命令實例小結

    這篇文章主要介紹了mongodb基本命令,結合實例形式總結分析了MongoDB數據庫切換、查看、刪除、查詢等基本命令用法與操作注意事項,需要的朋友可以參考下...

    dawn-liu3652020-05-26
  • MongoDBMongoDB憑什么躋身數據庫排行前五

    MongoDB憑什么躋身數據庫排行前五

    MongoDB以比去年同期超出65.96分的成績繼續雄踞榜單前五,這個增幅在全榜僅次于PostgreSQL的77.99,而其相對于4月份的6.10分的增長也是僅次于微軟SQL Server排名...

    孫浩峰3892020-05-22
  • MongoDB分布式文檔存儲數據庫之MongoDB分片集群的問題

    分布式文檔存儲數據庫之MongoDB分片集群的問題

    這篇文章主要介紹了分布式文檔存儲數據庫之MongoDB分片集群的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBMongoDB安裝圖文教程

    MongoDB安裝圖文教程

    這篇文章主要為大家詳細介紹了MongoDB安裝圖文教程,分為兩大部分為大家介紹下載MongoDB和安裝MongoDB的方法,感興趣的小伙伴們可以參考一下 ...

    Yangyi.He6132020-05-07
  • MongoDBMongodb實現定時備份與恢復的方法教程

    Mongodb實現定時備份與恢復的方法教程

    這篇文章主要給大家介紹了Mongodb實現定時備份與恢復的方法教程,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面...

    chenjsh364522020-05-13
  • MongoDB遷移sqlserver數據到MongoDb的方法

    遷移sqlserver數據到MongoDb的方法

    這篇文章主要介紹了遷移sqlserver數據到MongoDb的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    聽楓xl9682021-01-03
  • MongoDBMongoDB中javascript腳本編程簡介和入門實例

    MongoDB中javascript腳本編程簡介和入門實例

    作為一個數據庫,MongoDB有一個很大的優勢——它使用js管理數據庫,所以也能夠使用js腳本進行復雜的管理——這種方法非常靈活 ...

    MongoDB教程網6982020-04-24
  • MongoDBMongoDB 內存使用情況分析

    MongoDB 內存使用情況分析

    都說 MongoDB 是個內存大戶,但是怎么知道它到底用了多少內存呢...

    MongoDB教程網10002020-09-29
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 中文字幕一级 | 黄色免费成人 | 色www精品视频在线观看 | 一级黄色影视 | 亚洲精品第一 | 亚洲精品网址 | 免费av电影观看 | 国产精品久久久久久久久免费 | 国产免费久久精品 | 久久久婷 | 欧美成人二区 | 中文字幕久久精品 | 亚洲欧美在线播放 | 国产美女久久 | 久久亚洲国产精品 | 欧美色图亚洲 | 国产精品99一区二区三区 | 成人久久久精品国产乱码一区二区 | 日本a视频| 羞羞免费视频网站 | 亚洲精品视频在线看 | 日韩成人精品在线 | 久久久成人免费一区二区 | 国产一区在线视频 | 成人av入口 | 午夜视频网站 | 日韩在线观看中文字幕 | 日韩欧美手机在线 | 欧美另类综合 | 久久亚洲欧美日韩精品专区 | 久久情侣视频 | 久久综合九九 | 精品香蕉一区二区三区 | 在线观看中文字幕亚洲 | 亚洲 欧美 日韩 在线 | 视频一区二区三区在线观看 | 成人亚洲 | 欧美日韩免费一区二区三区 | 亚洲一区二区三区在线播放 | 欧产日产国产一区 | 亚洲精品视频在线播放 |