成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MongoDB干貨篇之查詢數(shù)據(jù)

大數(shù)據(jù) MongoDB
本文主要是關于MongoDB的查詢數(shù)據(jù),在開始之前我們先準備數(shù)據(jù)方便演示,詳細內(nèi)容見下文。

[[190391]]

在開始之前我們應該先準備數(shù)據(jù)方便演示,這里我插入的了幾條數(shù)據(jù),數(shù)據(jù)如下:

  1. db.user.insertMany( 
  2. [{ 
  3. name:'jack'
  4. age:22, 
  5. sex:'Man'
  6. tags:['python','c++','c'], 
  7. grades:[22,33,44,55], 
  8. school:{ 
  9. name:'shida'
  10. city:'xuzhou' 
  11. },{ 
  12. name:'jhon'
  13. age:33, 
  14. sex:null
  15. tags:['python','java'], 
  16. grades:[66,22,44,88], 
  17. school:{ 
  18. name:'kuangda'
  19. city:'xuzhou' 
  20. }, 
  21. name:'xiaoming'
  22. age:33, 
  23. tags:['python','java'], 
  24. grades:[66,22,44,88], 
  25. school:{ 
  26. name:'kuangda'
  27. city:'xuzhou' 
  28.  

find( , )

其中 query 表示查找的條件,相當于 mysql 中 where 子句, projection 列出你想要查找的數(shù)據(jù),格式為 db.collection.find(find(<query filter>, <projection>))

實例:

下面不帶參數(shù)的查找,將會查找出所有的結(jié)果

  1.  db.find().pretty(); 
  2.      
  3.     //輸出結(jié)果 
  4.      
  5.      
  6. {                                                      
  7.         "_id" : ObjectId("59056f81299fe049404b2899"),  
  8.         "name" : "jack",                               
  9.         "age" : 22,                                    
  10.         "tags" : [                                     
  11.                 "python",                              
  12.                 "c++",                                 
  13.                 "c"                                    
  14.         ],                                             
  15.         "grades" : [                                   
  16.                 22,                                    
  17.                 33,                                    
  18.                 44,                                    
  19.                 55                                     
  20.         ],                                             
  21.         "school" : {                                   
  22.                 "name" : "shida",                      
  23.                 "city" : "xuzhou"                      
  24.         }                                              
  25.  

下面找出滿足 name 為 jack 的數(shù)據(jù),并且只輸出 name , age ,這里的 _id 是默認輸出的,如果不想輸出將將它設置為 0 ,想要輸出那個字段將它設置為1

  1. db.user.find({name:'jack'},{name:1,age:1}) 
  2.  
  3. //輸出結(jié)果 
  4. "_id" : ObjectId("59056f81299fe049404b2899"), "name" : "jack""age" : 22 } 
  5.  
  6.  
  7. db.user.find({name:'jack'},{name:1,age:1,_id:0}) 
  8.  
  9. //輸出結(jié)果 
  10. {"name" : "jack""age" : 22 }  

**注意這里的一個 projection 不能 同時 指定包括和排除字段,除了排除 _id 字段。 在 顯式包括 字段的映射中, _id 字段是***一個您可以 顯式排除 的。

查詢內(nèi)嵌文檔

上述例子中插入的 school 數(shù)據(jù)就表示內(nèi)嵌文檔

完全匹配查詢

完全匹配查詢表示 school 中的查詢數(shù)組必須和插入的數(shù)組完全一樣,順序都必須一樣才能查找出來

  1. db.user.find({name:'jack',school:{name:'shida',city:'xuzhou'}}); 
  2.  
  3. //輸出結(jié)果 
  4.  
  5. "_id" : ObjectId("59056f81299fe049404b2899"), "name" : "jack""age" : 22, "tags" : [ "python""c++""c" ],  
  6. "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida""city" : "xuzhou" } } 
  7.  
  8.  
  9. //下面是指定輸出的字段,這里的school.name表示只輸出school文檔中name字段,必須加引號 
  10. db.user.find({name:'jack',school:{name:'shida',city:'xuzhou'}},{name:1,age:1,'school.name':1}); 
  11. //輸出結(jié)果 
  12. "_id" : ObjectId("59056f81299fe049404b2899"), "name" : "jack""age" : 22, "school" : { "name" : "shida" } }  

鍵值對查詢

可以通過鍵值對查詢,不用考慮順序,比如 'school.name':'shida' ,表示查詢學校名字為shida 的數(shù)據(jù),這里的引號是必須要的

  1. db.user.find({'school.name':'shida'},{name:1,school:1}); 
  2.  
  3. //輸出結(jié)果 
  4.  
  5. "_id" : ObjectId("59056f81299fe049404b2899"), "name" : "jack""school" : { "name" : "shida""city" : "xuzhou" } }  

查詢操作符

下面我們將配合查詢操作符來執(zhí)行復雜的查詢操作,比如元素查詢、 邏輯查詢 、比較查詢操作。我們使用下面的比較操作符 "$gt" 、 "$gte" 、 "$lt" 、 "$lte" (分別對應 ">" 、 ">=" 、 "<" 、 "<=" )

實例

下面查詢年齡在 20-30 之間的信息

  1. db.user.find({ 
  2. age:{$gt:20,$lt:30}   
  3. }) 
  4.  
  5. //輸出 
  6. "_id" : ObjectId("59056f81299fe049404b2899"), "name" : "jack""age" : 22, "tags" : [ "python""c++""c" ],  
  7. "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida""city" : "xuzhou" } }  

$ne

$ne 表示不相等,例如查詢年齡不等于 22 歲的信息

  1. db.user.find({age:{$ne:22}}) 
  2.  
  3. //輸出 
  4. "_id" : ObjectId("59057c16f551d8c9003d31e0"), "name" : "jhon""age" : 33, "tags" : [ "python""java" ],  
  5. "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda""city" : "xuzhou" } }  

slice

$slice 操作符控制查詢返回的數(shù)組中元素的個數(shù)。此操作符根據(jù)參數(shù) { field: value } 指定鍵名和鍵值選擇出文檔集合,并且該文檔集合中指定 array 鍵將返回從指定數(shù)量的元素。如果 count 的值大于數(shù)組中元素的數(shù)量,該查詢返回數(shù)組中的所有元素的。

語法: db.collection.find( { field: value }, { array: {$slice: count }}) ;

下面將查詢 grades 中的前兩個數(shù)

  1. db.user.find({name:'jack'},{grades:{$slice:2},name:1,age:1,'school.name':1}); 
  2.  
  3. //輸出,可以看出這里的grades只輸出了前面兩個 
  4.  
  5. "_id" : ObjectId("59057c16f551d8c9003d31df"), "name" : "jack""age" : 22, "grades" : [ 22, 33 ], "school" : { "name" : "shida" } }  

下面將輸出后3個數(shù)據(jù)

  1. db.user.find({name:'jhon'},{grades:{$slice:-3},name:1}); 
  2.  
  3. //輸出 
  4. "_id" : ObjectId("59057c16f551d8c9003d31e0"), "name" : "jhon""grades" : [ 22, 44, 88 ] }  

下面介紹指定一個數(shù)組作為參數(shù)。數(shù)組參數(shù)使用 [ skip , limit ] 格式,其中***個值表示在數(shù)組中跳過的項目數(shù),第二個值表示返回的項目數(shù)。

  1. db.user.find({name:'jack'},{grades:{$slice:[2,2]},name:1});  //這里將會跳過前面的兩個,直接得到后面的兩個數(shù)據(jù) 
  2.  
  3.  
  4. //輸出 
  5.  
  6. "_id" : ObjectId("59057c16f551d8c9003d31df"), "name" : "jack""grades" : [ 44, 55 ] }  

$exists

如果 $exists 的值為 true ,選擇存在該字段的文檔,若值為 false 則選擇不包含該字段的文檔

下面將會查詢不存在sex這一項的信息

  1. db.user.find({sex:{$exists:false}}) 
  2.  
  3. //結(jié)果 
  4. "_id" : ObjectId("59058460fe58ed1089f2a5cd"), "name" : "xiaoming""age" : 33, "tags" : [ "python""java" ],  
  5. "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda""city" : "xuzhou" } } 
  6.  
  7.  
  8. db.user.find({sex:{$exists:true}}); 
  9.  
  10. //結(jié)果 
  11. "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack""age" : 22, "sex" : "Man""tags" : [ "python""c++""c" ],  
  12. "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida""city" : "xuzhou" } } 
  13. "_id" : ObjectId("59058460fe58ed1089f2a5cc"), "name" : "jhon""age" : 33, "sex" : null"tags" : [ "python""java" ],  
  14. "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda""city" : "xuzhou" } }  

$or

執(zhí)行邏輯 OR 運算,指定一個至少包含兩個表達式的數(shù)組,選擇出至少滿足數(shù)組中一條表達式的文檔。

語法: { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }

下面將要查找 age 等于 22 或者 age 等于 33 的值

  1. db.user.find({$or:[{age:22},{age:33}]}) 
  2.  
  3. //結(jié)果 
  4.  
  5. "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack""age" : 22, "sex" : "Man""tags" : [ "python""c++""c" ],  
  6. "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida""city" : "xuzhou" } } 
  7. "_id" : ObjectId("59058460fe58ed1089f2a5cc"), "name" : "jhon""age" : 33, "sex" : null"tags" : [ "python""java" ],  
  8. "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda""city" : "xuzhou" } } 
  9. "_id" : ObjectId("59058460fe58ed1089f2a5cd"), "name" : "xiaoming""age" : 33, "tags" : [ "python""java" ],  
  10. "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda""city" : "xuzhou" } }  

下面將會查找出年齡為22或者33并且姓名為 jack 的人的信息

  1. db.user.find({name:'jack',$or:[{age:33},{age:22}]}) 
  2.  
  3. //結(jié)果 
  4.  
  5. "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack""age" : 22, "sex" : "Man""tags" : [ "python""c++""c" ],  
  6. "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida""city" : "xuzhou" } }  

$and

指定一個至少包含兩個表達式的數(shù)組,選擇出滿足該數(shù)組中所有表達式的文檔。 $and 操作符使用短路操作,若***個表達式的值為“ false ”,余下的表達式將不會執(zhí)行。

語法: { $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }

下面將會查找年齡在 20-30 之間的信息,對于下面使用逗號分隔符的表達式列表, MongoDB會提供一個隱式的 $and 操作:

  1. db.user.find({$and:[{age:{$gt:20}},{age:{$lt:30}}]}) 
  2. //上述語句相當于db.user.find({age:{$gt:20},age:{$lt:30}}) 
  3.  
  4. //結(jié)果 
  5. "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack""age" : 22, "sex" : "Man""tags" : [ "python""c++""c" ],  
  6. "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida""city" : "xuzhou" } } 

$in

匹配鍵值等于指定數(shù)組中任意值的文檔。類似 sql 中 in ,只要匹配一個 value 就會輸出

語法: { field: { $in: [<value1>, <value2>, ... <valueN> ] } }

下面將會查找grades中存在22,33之間的任意一個數(shù)的信息

  1.  db.user.find({grades:{$in:[22,33]}}) 
  2.   
  3.  //輸出 
  4.   
  5. "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack""age" : 22, "sex" : "Man""tags" : [ "python""c++""c" ],  
  6. "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida""city" : "xuzhou" } } 
  7. "_id" : ObjectId("59058460fe58ed1089f2a5cc"), "name" : "jhon""age" : 33, "sex" : null"tags" : [ "python""java" ],  
  8. "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda""city" : "xuzhou" } } 
  9. "_id" : ObjectId("59058460fe58ed1089f2a5cd"), "name" : "xiaoming""age" : 33, "tags" : [ "python""java" ],  
  10. "grades" : [ 66, 22, 44, 88 ], "school" : { "name" : "kuangda""city" : "xuzhou" } }  

$nin

匹配鍵不存在或者鍵值不等于指定數(shù)組的任意值的文檔。類似 sql 中 not in (SQL中字段不存在使用會有語法錯誤).

查詢出 grades 中不存在100或者44的文檔

  1. db.user.find({grades:{$nin:[100,44]}}) 

$not

執(zhí)行邏輯 NOT 運算,選擇出不能匹配表達式的文檔 ,包括沒有指定鍵的文檔。 $not 操作符不能獨立使用,必須跟其他操作一起使用

語法:{ field: { $not: { } } }

查詢年齡不大于30的信息 

  1. db.user.find({age:{$not:{$gt:30}}}) 
  2.  
  3. //輸出 
  4. "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack""age" : 22, "sex" : "Man""tags" : [ "python""c++""c" ],  
  5. "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida""city" : "xuzhou" } }  
責任編輯:龐桂玉 來源: 36大數(shù)據(jù)
相關推薦

2012-07-26 08:32:38

MongoDB

2009-09-03 11:42:32

2011-05-23 09:23:19

MySQLMongoDB

2019-05-31 12:13:49

MySQL數(shù)據(jù)庫安全

2018-01-29 12:39:56

數(shù)據(jù)庫MongoDB集群

2020-09-29 08:35:08

MongoDBPython數(shù)據(jù)

2018-07-25 08:57:42

存儲數(shù)據(jù)遷移

2017-01-20 14:32:38

大數(shù)據(jù)數(shù)據(jù)分析安全

2022-11-16 08:00:37

MongoDB阿里云的登錄

2012-06-15 10:13:03

2023-08-03 07:39:10

MongoDB數(shù)據(jù)備份

2011-09-14 15:30:00

MongoDB

2015-08-28 10:09:35

數(shù)據(jù)之美

2017-05-03 08:59:07

網(wǎng)絡分析數(shù)據(jù)

2013-11-12 16:38:22

2013-05-15 14:32:09

虛擬化數(shù)據(jù)復制

2011-02-25 10:36:12

Proftpd

2011-02-25 10:25:07

Proftpd

2022-01-12 18:35:54

MongoDB數(shù)據(jù)查詢

2025-04-22 07:52:59

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 久久精品亚洲成在人线av网址 | 久久69精品久久久久久久电影好 | 亚洲成人综合网站 | 高清视频一区二区三区 | 91精品一区二区三区久久久久 | 久久久精品亚洲 | 色免费视频 | .国产精品成人自产拍在线观看6 | 在线观看www | 色吊丝2| 三级av在线 | www一级片 | 一区二区三区在线播放视频 | 成人欧美一区二区三区在线播放 | 国产福利视频导航 | 久久亚洲一区二区三区四区 | 欧美日韩在线精品 | 国产精品.xx视频.xxtv | 成人小视频在线观看 | 午夜影院普通用户体验区 | 成人三级视频在线观看 | 欧美日一区二区 | 国产资源在线视频 | 久久国产区 | 美日韩中文字幕 | 久久久久久久久久久久久久av | 国产精品成人一区二区 | 伊人狼人影院 | 日韩国产免费观看 | 久久久久久久久99 | 激情av在线 | 日本污视频 | 一区二区三区视频在线观看 | 亚洲欧美在线免费观看 | 国产免费福利小视频 | 国产超碰人人爽人人做人人爱 | 国产精品不卡 | 久草热线 | 无毛av| 在线视频成人 | 久久久九九 |