1. 程式人生 > >mongoDB學習筆記(一)之操作符

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