摘要:通過這個基本可以實(shí)現(xiàn)任意類型的查詢。三使用正則查詢查找名字中含有的記錄查找以名稱以開頭且不區(qū)分大小寫的記錄四查詢數(shù)組判斷某個數(shù)組類型字段包含的多個指定值時。
MongoDB學(xué)習(xí)筆記(3)- Mongo Shell 常用查詢命令
本文所使用的MongoDB版本為 4.0.10
> db.version(); 4.0.10一、find 命令進(jìn)行簡查詢
find( 查詢條件 ,返回的字段),1. 查詢時返回所有字段
db.user.find() --> 查詢user集合中所有的數(shù)據(jù)
> db.user.find() { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
db.user.find( {"username":"Mary"} ) --> 列出username=Mary的數(shù)據(jù)
> db.user.find({"username": "Mary"}) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 }
db.user.find( {"age":50} ) --> 列出 age = 50 的數(shù)據(jù)
> db.user.find( {"age":50} ) { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }2. 查詢時只返回指定幾個字段
db.user.find({}, {"username":1}) --> 列出所有人的 username 字段
> db.user.find({}, {"username": 1}) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary" } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin" } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart" }
db.user.find({}, {"tel": 1}) --> 列出所有人的 tel 字段
> db.user.find({}, {"tel": 1}) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7") } { "_id" : ObjectId("5d2f103414077ad0dab139c8") } { "_id" : ObjectId("5d2f105414077ad0dab139c9") }
db.user.find({} , {"age": 0} ) --> 除了age字段,其他字段都列出來
> db.user.find({}, {"age": 0}) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary" } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin" } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart" }二、常用操作符 1. $lt (<)
查詢年齡小于30歲的用戶
> db.user.find( {"age": { $lt: 30 } } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" }2. $lte (<=)
查詢年齡小于等于30歲的用戶
> db.user.find( {"age": { $lte: 30 } } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 }3. $gt (>)
查詢年齡大于30歲的用戶
> db.user.find( {"age": { $gt: 30 } } ) { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }4. $gte (>= )
查詢年齡大于等于30歲的用戶
> db.user.find( {"age": { $gte: 30 } } ) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }5. $ne ( <> )
查詢年齡不等于30歲的用戶
> db.user.find( {"age": { $ne: 30 } } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }6. $and (AND)
查詢年齡大于10歲且小于40歲的用戶
> db.user.find( { $and: [ { "age": { $lt: 40 } } , {"age": { $gt: 10 } } ] } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null }7. $or (OR)
查詢年齡小于20歲或者大于40歲的用戶
> db.user.find( { $or: [ { "age": { $lt: 20 } } , {"age": { $gt:40 } } ] } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }8. $in (IN)
查詢年齡為 20, 30, 40 歲的用戶
> db.user.find( { "age" : { $in : [20, 30, 40] } } ) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 }9. $not (NOT)
查詢年齡不是 20, 40 歲的用戶($not)
> db.user.find( { "age" : { $not: { $in : [20, 40] } } } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }10. $nin (NOT IN)
查詢年齡不是 20, 40 歲的用戶
> db.user.find( { "age" : { $nin : [20, 40] } } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }11. $mod (取模)
查詢年齡對 4 取模余 2 的用戶
> db.user.find( {"age" : { $mod : [4, 2] } } ) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }12. $exists (存在)
$exists 用于判斷鍵是否
給 Mary 添加 tel 字段,值設(shè)為 null
> db.user.update({ "username": "Mary" }, { $set : { "tel" : null } }) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.user.find() { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
列出存在 tel 字段的記錄
> db.user.find({ "tel" : { $exists : 1 }}) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null }
判斷值為 null 時要注意:
db.user.find({ "friends" : null })
該命令不僅查出值為null的記錄,friends 鍵不存在的記錄也會被取出來。
> db.user.find({ "tel" : null }) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
如果想取出 friends 鍵存在,并且值為 null 的記錄應(yīng)該這樣來取:
> db.user.find( { $and: [ { "tel" : null }, { "tel" : {$exists: 1 } } ] } ) { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null }13. $where
$where : 根據(jù)函數(shù)返回值來判斷是否返回?cái)?shù)據(jù)
取出 年齡 * 3 + 5 小于 100 用戶的
db.user.find( { $where : function(){ return (this.age * 3 + 5 < 100); } } );
> db.user.find( { $where : function(){ return (this.age * 3 + 5 < 100); } } ); { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086" } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null }
this 代表當(dāng)前這個記錄。三、使用正則查詢通過這個 $where 基本可以實(shí)現(xiàn)任意類型的查詢。不過不到必要時候不要用這個方法,因?yàn)樗乃俣缺纫话悴樵円芏唷?/p>
查找名字中含有 "art" 的記錄
> db.user.find( { "username" : /art/ } ) { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
查找以名稱以 "mar" 開頭且不區(qū)分大小寫的記錄
> db.user.find( {"username": /^mar/i } ); { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40 }四、查詢數(shù)組 1. $all:判斷某個數(shù)組類型字段包含的多個指定值時。
給 user 集合中的用戶添加一些朋友,結(jié)果如下:
> db.user.find() { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086", "friend" : [ "Mary", "Jocker", "Martin", "Kart" ] } { "_id" : ObjectId("5d2f102414077ad0dab139c7"), "username" : "Mary", "age" : 30, "tel" : null, "friend" : [ "Jocker", "Martin" ] } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40, "friend" : [ "Mary", "Jocker", "Kart" ] } { "_id" : ObjectId("5d2f105414077ad0dab139c9"), "username" : "kart", "age" : 50 }
取出 friend 數(shù)組中既有 Mary 又有 Jocker 的記錄
> db.user.find({ "friend": { $all : ["Mary", "Jocker"] } }) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086", "friend" : [ "Mary", "Jocker", "Martin", "Kart" ] } { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40, "friend" : [ "Mary", "Jocker", "Kart" ] }2. $size:查詢擁有指定元素個數(shù)的數(shù)組
取出 friend 數(shù)組中有3個值的記錄
> db.user.find( { "friend" : { $size : 3 } } ) { "_id" : ObjectId("5d2f103414077ad0dab139c8"), "username" : "Martin", "age" : 40, "friend" : [ "Mary", "Jocker", "Kart" ] }3. $slice : 返回一個數(shù)組的子集
{$slice : 10} --> 數(shù)組中的前10個
{$slice : -10} --> 數(shù)組中的后10個
{$slice : [20, 10] } --> 從數(shù)組中下標(biāo)為20的元素開始,向后去除10個元素
取出Tom的前3個朋友
> db.user.find( {"username": "Tom"}, { "friend" : {$slice : 3} } ) { "_id" : ObjectId("5d2f0a4714077ad0dab139c5"), "username" : "Tom", "age" : 12, "tel" : "10086", "friend" : [ "Mary", "Jocker", "Martin" ] }五、查詢內(nèi)嵌文檔 1. $elemMatch
如有這樣的數(shù)據(jù)結(jié)構(gòu):
有個comments字段,該字段是一個數(shù)組,每一項(xiàng)是一個內(nèi)嵌的comment對象
{ "_id": ObjectId("5d31b1d24fd0d7ad0a1a1361"), "author": "Tom", "content": "I am Tom!", "comments": [{ "user": "Mary", "score": 3, "comment": "Nice!" }, { "user": "Martin", "score": 6, "comment": "I"m reading..." }, { "user": "Jocker", "score": 8, "comment": "You"re kidding me" }] } { "_id": ObjectId("5d31b3114fd0d7ad0a1a1364"), "author": "Martin", "content": "I am Martin!", "comments": [{ "user": "Tom", "score": 5, "comment": "Nice!" }, { "user": "Mary", "score": 6, "comment": "I"m reading..." }, { "user": "Jocker", "score": 3, "comment": "You"re kidding me" }] } { "_id": ObjectId("5d31b3314fd0d7ad0a1a1365"), "author": "Mary", "content": "I am Mary!", "comments": [{ "user": "Tom", "score": 3, "comment": "Nice!" }, { "user": "Martin", "score": 5, "comment": "I"m reading..." }, { "user": "Jocker", "score": 2, "comment": "You"re kidding me" }] }
查詢評論中包含 score 大于5的文章記錄
> db.blog.find ({ "comments" : { "$elemMatch" : { "score" : {"$gt" : 5}}} }) { "_id" : ObjectId("5d31b1d24fd0d7ad0a1a1361"), "author" : "Tom", "content" : "I am Tom!", "comments" : [ { "user" : "Mary", "score" : 3, "comment" : "Nice!" }, { "user" : "Martin", "score" : 6, "comment" : "I"m reading..." }, { "user" : "Jocker", "score" : 8, "comment" : "You"re kidding me" } ] } { "_id" : ObjectId("5d31b3114fd0d7ad0a1a1364"), "author" : "Martin", "content" : "I am Martin!", "comments" : [ { "user" : "Tom", "score" : 5, "comment" : "Nice!" }, { "user" : "Mary", "score" : 6, "comment" : "I"m reading..." }, { "user" : "Jocker", "score" : 3, "comment" : "You"re kidding me" } ] }
查詢Tom的文章的評論中 score 大于 5 的評論記錄
> db.blog.find ({"author": "Tom"}, { "comments" : { "$elemMatch" : { "score" : {"$gt" : 3}}} }) { "_id" : ObjectId("5d31b1d24fd0d7ad0a1a1361"), "comments" : [ { "user" : "Martin", "score" : 6, "comment" : "I"m reading..." } ] }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/106197.html
摘要:本文內(nèi)容主要來自的學(xué)習(xí),學(xué)習(xí)筆記基于個人理解對原書部分內(nèi)容進(jìn)行調(diào)整。如果需要練習(xí)相關(guān)命令行工具可直接閱讀本學(xué)習(xí)筆記。筆者測試數(shù)據(jù)庫版本較早,但文中涉及的所有概念及命令行工具基本適用于所有版本。二準(zhǔn)備安裝和運(yùn)行服務(wù)在學(xué)習(xí)之前,需要安裝環(huán)境。 感謝 Karl Seguin 編寫的 The Little MongoDB Book 這本 MongoDB 入門書。 本文內(nèi)容主要來自「The Li...
摘要:本文內(nèi)容主要來自的學(xué)習(xí),學(xué)習(xí)筆記基于個人理解對原書部分內(nèi)容進(jìn)行調(diào)整。如果需要練習(xí)相關(guān)命令行工具可直接閱讀本學(xué)習(xí)筆記。筆者測試數(shù)據(jù)庫版本較早,但文中涉及的所有概念及命令行工具基本適用于所有版本。二準(zhǔn)備安裝和運(yùn)行服務(wù)在學(xué)習(xí)之前,需要安裝環(huán)境。 感謝 Karl Seguin 編寫的 The Little MongoDB Book 這本 MongoDB 入門書。 本文內(nèi)容主要來自「The Li...
摘要:數(shù)據(jù)模型取決于數(shù)據(jù)庫類型。僅支持位浮點(diǎn)數(shù),所以位整數(shù)會被自動轉(zhuǎn)換為位浮點(diǎn)數(shù)。位浮點(diǎn)數(shù)中的數(shù)字都是這種類型。數(shù)字只能表示為雙精度數(shù)位浮點(diǎn)數(shù)的另外一個問題是,有些位的整數(shù)并不能精確地表示為位浮點(diǎn)數(shù)。 MongoDB學(xué)習(xí)筆記(1)- MongoDB簡介及數(shù)據(jù)類型 本文所使用的MongoDB版本為 4.0.10 > db.version(); 4.0.10 一、MongoDB 介紹 1. Mo...
摘要:我們常說的分表分庫分區(qū)等概念都屬于分片的實(shí)際體現(xiàn)。傳統(tǒng)分片做法是手工分表分庫。自動分片技術(shù)是根據(jù)指定的片鍵自動拆分?jǐn)?shù)據(jù)并維護(hù)數(shù)據(jù)請求路由的過程。 1.mongodb特性 1)mongo是一個面向文檔的數(shù)據(jù)庫,它集合了nosql和sql數(shù)據(jù)庫兩方面的特性。 2)所有實(shí)體都是在首次使用時創(chuàng)建。 3)沒有嚴(yán)格的事務(wù)特性,但是它保證任何一次數(shù)據(jù)變更都是原子性的。 4)也沒有固定的數(shù)據(jù)模型 5)...
閱讀 2545·2023-04-26 01:44
閱讀 2558·2021-09-10 10:50
閱讀 1411·2019-08-30 15:56
閱讀 2250·2019-08-30 15:44
閱讀 512·2019-08-29 11:14
閱讀 3417·2019-08-26 11:56
閱讀 3018·2019-08-26 11:52
閱讀 909·2019-08-26 10:27