mongoDB學習筆記(一)之操作符
本文主要講解mongoDb的一些常用的操作符的用法.隨著作者本身的能力的提高,本文也會不斷的完善.
官方文件連結為有: https://docs.mongodb.com/manual/reference/operator/
什麼是操作符呢? 其實說白了就是 "$" 加上 in,all ,eq,lt 等一些字元組成.
在講解開始之前,先附上本文的測試資料,準備好測試資料.
db.users.drop(); var user1={ "username":"lison", "country":"china", "address":{ "aCode":"411000", "add":"長沙" }, "favorites":{ "movies":["殺破狼 2","戰狼","雷神 1"], "cites":["長沙","深圳","上海"] }, "age":18, "salary":NumberDecimal("18889.09"), "lenght":1.79 }; var user2={ "username":"james", "country":"English", "address":{ "aCode":"311000", "add":"地址" }, "favorites":{ "movies":["復仇者聯盟","戰狼","雷神 1"], "cites":["西安","東京","上海"] }, "age":24, "salary":NumberDecimal("7889.09"), "lenght":1.35 }; var user3={ "username":"deer", "country":"japan", "address":{ "aCode":"411000", "add":"長沙" }, "favorites":{ "movies":["肉蒲團","一路向西","倩女幽魂"], "cites":["東莞","深圳","東京"] }, "age":22, "salary":NumberDecimal("6666.66"), "lenght":1.85 }; var user4= { "username":"mark", "country":"USA", "address":{ "aCode":"411000", "add":"長沙" }, "favorites":{ "movies":["蜘蛛俠","鋼鐵俠","蝙蝠俠"], "cites":["青島","東莞","上海"] }, "age":20, "salary":NumberDecimal("6398.22"), "lenght":1.77 }; var user5= { "username":"peter", "country":"UK", "address":{ "aCode":"411000", "add":"TEST" }, "favorites":{ "movies":["蜘蛛俠","鋼鐵俠","蝙蝠俠"], "cites":["青島","東莞","上海"] }, "salary":NumberDecimal("1969.88") }; db.users.insert(user1); db.users.insert(user2); db.users.insert(user3); db.users.insert(user4); db.users.insert(user5);
由於筆者的英文水平有限,所以安裝了翻譯外掛(彩雲小譯); 可以同時展現英文原文 和中文翻譯, 這樣可以一定程度上自行判定一下翻譯是否準確,避免翻譯後全是中,不顯示英文,如果不準確的話,就被翻譯外掛帶偏了.
首先看官網提供的查詢操作符.
那麼我們現在測試一下 這幾個操作符的命令:
$eq. db.users.find({"username":{"$eq":"lison"}}).pretty(); 其實等同於命令 db.users.find({"username":"lison"}).pretty()
作用就是查詢出資料使用者名稱等於lison的資料. 即查詢key = value 的資料,當然最好是用在數字上,字串上用可以用, equas 的縮寫
$gt: 匹配大於指定值的值 ,greater than 的縮寫.
查詢欄位為字串 : db.users.find({"username":{"$gt":"lison"}}).pretty();
由以上結果可以看出$gt 用於字串欄位也是可以,比較大小的判定方式為字典中的排序方式.
查詢欄位型別為數字型別時 : db.users.find({"age":{"$gt":22}}).pretty();
看出查詢數字型別時,是查詢比制定欄位值數值大的值.
$gte : 查詢欄位值大於等於制定值. greater than or equas 的縮寫.
語法為 db.users.find({"age":{"$gte":22}}).pretty();
結果就是gt 和 eq 的並集,這裡就不再演示效果.
$in : 查詢的值包含指定陣列中的任何一個元素即可.
db.users.find({"username":{"$in":["lison","mark"]}}).pretty();
當 查詢的欄位型別為字串型別時(非陣列型別),可以看著該欄位的值在時列表中的任何一個元素即可.
當查詢的欄位是一個數組型別的值時: db.users.find({"favorites.cites":{"$in":["西安","東京"]}}).pretty();
當查詢的值時資料型別時,只要該值包含資料中的任何一項即可.
$all : 查詢值包含制定資料中的每一個元素的資料.
db.users.find({"favorites.cites":{"$all":["西安","東京"]}}).pretty();
當查詢欄位為非陣列時: db.users.find({"username":{"$all":["lison"]}}).pretty();
可以看到如果資料包含多個值,時永遠不可能成立的.當陣列中包含一個值時,和 $eq 的用法相同.
上面講講了 $eq, $gt,$gte, $in ,$all, 那麼有了這些正向的操作,必然有和其對應的反向操作.接下來,再講其反向操作就很容易理解了
$ne : 查詢不等於制定值的資料. 是$eq 的反向操作.
db.users.find({"username":{"$ne":"lison"}});
查詢出使用者名稱不等於lison的資料.
$lte : 小於等於指定值得資料,$gt 的反向操作.
$lt : 小於指定值的資料 , $gte 的反向操作
$nin 不包含陣列中的任何一項, $in 的 反向操作
db.users.find({"favorites.cites":{"$nin":["東京","西安"]}});
查詢出喜歡的城市既不包含西安,也不包含東京的資料,與順序無關.
至於$all 的反向操作符,目前筆者還未了解到. 但是可以藉助其餘的邏輯運算子進行關聯出來
操作符的暫且更新至此,後續再次更新
&n