最近一直在用mongo,收集下經(jīng)常用到的mongo命令
工具:Robo 3T
工具特性:支持js腳本,便于增刪改查操作,但插入大數(shù)據(jù)量不太適合,起兩個shell就報錯,單線程插入數(shù)據(jù)太慢了。
1、輸出命令的執(zhí)行時間(打印出來的是毫秒):
var start = new Date()
#命令塊
var end = new Date()
end - start
2、查詢(多條件)
1)精確匹配
‘字段名’:'字段值',‘字段名’:'字段值',‘字段名’:'字段值’.........‘字段名’:'字段值'
2)取某個范圍(時間或者序號等)
關鍵字:
$gte:>=;
$gt:>;
$lte:<=;
$lt:<
$and:復合條件
復合條件(>= && <=):
“$and”:[{'字段名":{"$gle":xxxx}},{"字段名":{“$lte”:yyy}}]
舉例:某個時間晚于:ISODate("2021-06-07T01:53:24.197Z"),且早于ISODate("2021-08-07T01:53:24.197Z")
單個條件(>, <):
"字段名":{$gt:ISODate("2021-06-07T01:53:24.197Z")
"字段名":{$lt:ISODate("2021-06-07T01:53:24.197Z")
"$and":[{"字段名":{$gte:ISODate("2021-06-07T01:53:24.197Z")}},{"sendTime":{$lte:ISODate("2021-08-07T01:53:24.197Z")}}]
db.getCollection('collectionName').find(
{
? ? ?'name1':'value1',
//? ? 'name2':'value2',
? ? 'name3':'value3',
? ? "$and":[{"time":{$gte:ISODate("2021-06-07T01:53:24.197Z")}},{"sendTime":{$lte:ISODate("2021-08-07T01:53:24.197Z")}}]
? ? }
)
3、分頁、過濾、限制條數(shù)
關鍵字:skip(num)、limit(num)
修改page和num,控制分頁參數(shù)
var page = 1
var num = 100
var sk = (page-1)*num
db.getCollection('XMessageSms').find({'value1' : 'name1' }).skip(sk).limit(num))
4、排序
關鍵字:sort,
格式:sort({字段名:-1/1})
-1--倒序;1--正序
舉例:
db.getCollection('XMessageSms').find({'value1' : 'name1' }).sort({字段名:-1/1}}
又想分頁,又想排序
var page = 1
var num = 100
var sk = (page-1)*num
db.getCollection('XMessageSms').find({'value1' : 'name1' }).skip(sk).limit(num).sort({sendTime:-1})
5、查看執(zhí)行效率
關鍵字:.explain("executionStats")
具體使用:在執(zhí)行語句最后面加即可
關鍵信息--"executionStats" ,“indexFilterSet“
以一次查詢結(jié)果為例:
"indexFilterSet" : false,-----------------------無索引,有的話是true
"executionStats" : {
? ? ? ? "nReturned" : 100,-----------------------查詢結(jié)果條數(shù)
? ? ? ? "executionTimeMillis" : 15519,--------本次查詢執(zhí)行的時間
? ? ? ? "totalDocsExamined" : 2625240,---------遍歷的總數(shù)據(jù)量
? ??????"inputStage" : {
? ? ? ? ? ? ? ? ? ? "stage" : "COLLSCAN",----------全表遍歷
????????}
}