MongoDB查詢操作
按條件查詢
比較操作:$lt,$lte,$gt,$gte,$ne
db.user.find({"score":{$gt:80}});
$or :包含多個條件,他們之間為or的關系 ,$nor相當於or取反
db.user.find({$or:[{"score":{$gt:80}},{"user_id":"u3"}]});
$not:用作其他條件之上,取反
$mod:將查詢的值除以第一個給定的值,如果余數等於等二個值則匹配成功
db.user.find({"score":{$mod:[4,1]}});
$in :查詢一個鍵的多個值,只要鍵匹配其中一個即可 , $nin為不包含
db.user.find({"score":{$in:[70,80]}});
$all:鍵需要匹配所有的值
db.user.find({"house":{$all:[90]}});
$exists:檢查某個鍵是否存在,1表示存在,0表示不存在
db.user.find({"name":{$exists:1}});
null類型:不僅能匹配鍵的值為null,還匹配鍵不存在的情況
db.user.find({"name":null});
查詢數組
單個元素匹配,就跟前面寫條件一樣,{key:value}
db.user.find({"house":80});
多個元素匹配,使用$all, {key:{$all:[a,b]}},元素的順序無所謂
db.user.find({"house":{$all:[80,120]}});
可以使用索引指定查詢數組特定位置, {“key.索引號”:value}
db.user.find({"house.1":120});
查詢某個長度的數組,使用$size
db.user.find({"house":{$size:2}});
指定子集,使用$slice,正數是前面多少條,負數是尾部多少條,也可以指定偏移量和要返回的元素數量,比如:$slice:[50,10]
db.user.find({"house":{$exists:1}},{"house":{$slice:[0,2]}});
可以使用$來指定符合條件的任意一個數組元素,如:{”users.$”:1}
db.user.find({"house":{$exists:1}},{"house.$":1});
$elemMatch:要求同時使用多個條件語句來對一個數組元素進行比較判斷
db.user.find({"house":{$elemMatch:{$gte:80,$lt:90}}});
查詢記錄條數的命令:count
db.user.find().count();
如果要獲取按條件查詢後記錄的條數,需要指定count(true或者非0的數)
- 限制返回的記錄條數的命令:limit(要返回的條數)
- 限制返回的記錄條數起點的命令:skip(從第幾條開始返回)
- 排序的命令:sort({要排序的字段:1為升序,-1為降序})
db.user.find({}).limit(2).count(1);
db.user.find({}).skip(1).limit(2);
db.user.find({}).sort({"score":1});
分頁查詢:組合使用limit,skipt和sort
當然也可以使用其他方式來分頁,比如采用自定義的id,然後根據id來分頁
查詢給定鍵的所有不重復的數據,命令:distinct
語法:db.runCommand({“distinct”:集合名,“key”:”獲得不重復數據的字段”});
db.runCommand({"distinct":"user","key":"user_id"});
存儲過程
MongoDB的存儲過程其實就是個自定義的js函數
使用db.system.js.save({“_id”:名稱,value:函數});
var totalF=function (a,b){ return a+b ;}; db.system.js.save({"_id":"myF","value":totalF});
可以通過如下命令查看:db.system.js.find();
可以通過如下命令調用:db.eval(名稱)
db.eval("myF(1,3)");
MongoDB查詢操作