日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
MongoDB干貨篇之查詢數(shù)據(jù)

在開(kāi)始之前我們應(yīng)該先準(zhǔn)備數(shù)據(jù)方便演示,這里我插入的了幾條數(shù)據(jù),數(shù)據(jù)如下:

成都創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括江口網(wǎng)站建設(shè)、江口網(wǎng)站制作、江口網(wǎng)頁(yè)制作以及江口網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,江口網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到江口省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

 
 
 
  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. },{
  13. name:'jhon',
  14. age:33,
  15. sex:null,
  16. tags:['python','java'],
  17. grades:[66,22,44,88],
  18. school:{
  19. name:'kuangda',
  20. city:'xuzhou'
  21. }
  22. },
  23. {
  24. name:'xiaoming',
  25. age:33,
  26. tags:['python','java'],
  27. grades:[66,22,44,88],
  28. school:{
  29. name:'kuangda',
  30. city:'xuzhou'
  31. }
  32. }
  33. ]

find( , )

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

實(shí)例:

下面不帶參數(shù)的查找,將會(huì)查找出所有的結(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.         }                                             

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

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

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

查詢內(nèi)嵌文檔

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

完全匹配查詢

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

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

鍵值對(duì)查詢

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

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

查詢操作符

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

實(shí)例

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

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

$ne

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

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

slice

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

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

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

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

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

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

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

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

$exists

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

下面將會(huì)查詢不存在sex這一項(xiàng)的信息

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

$or

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

語(yǔ)法: { $or: [ { }, { }, ... , { } ] }

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

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

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

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

$and

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

語(yǔ)法: { $and: [ { }, { } , ... , { } ] }

下面將會(huì)查找年齡在 20-30 之間的信息,對(duì)于下面使用逗號(hào)分隔符的表達(dá)式列表, MongoDB會(huì)提供一個(gè)隱式的 $and 操作:

 
 
 
  1. db.user.find({$and:[{age:{$gt:20}},{age:{$lt:30}}]})
  2. //上述語(yǔ)句相當(dāng)于db.user.find({age:{$gt:20},age:{$lt:30}})
  3. //結(jié)果
  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" } }

$in

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

語(yǔ)法: { field: { $in: [, , ... ] } }

下面將會(huì)查找grades中存在22,33之間的任意一個(gè)數(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中字段不存在使用會(huì)有語(yǔ)法錯(cuò)誤).

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

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

$not

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

語(yǔ)法:{ field: { $not: { } } }

查詢年齡不大于30的信息

 
 
 
  1. db.user.find({age:{$not:{$gt:30}}})
  2. //輸出
  3. { "_id" : ObjectId("59058460fe58ed1089f2a5cb"), "name" : "jack", "age" : 22, "sex" : "Man", "tags" : [ "python", "c++", "c" ], 
  4. "grades" : [ 22, 33, 44, 55 ], "school" : { "name" : "shida", "city" : "xuzhou" } } 

分享標(biāo)題:MongoDB干貨篇之查詢數(shù)據(jù)
文章鏈接:http://www.dlmjj.cn/article/dphpige.html