最近一直在用mongo,收集下经常用到的mongo命令
工具:Robo 3T
工具特性:支持js脚本,便于增删改查操作,但插入大数据量不太适合,起两个shell就报错,单线程插入数据太慢了。
1、输出命令的执行时间(打印出来的是毫秒):
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、分页、过滤、限制条数
关键字:skip(num)、limit(num)
修改page和num,控制分页参数
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、查看执行效率
关键字:.explain("executionStats")
具体使用:在执行语句最后面加即可
关键信息--"executionStats" ,“indexFilterSet“
以一次查询结果为例:
"indexFilterSet" : false,-----------------------无索引,有的话是true
"executionStats" : {
"nReturned" : 100,-----------------------查询结果条数
"executionTimeMillis" : 15519,--------本次查询执行的时间
"totalDocsExamined" : 2625240,---------遍历的总数据量
"inputStage" : {
"stage" : "COLLSCAN",----------全表遍历
}
}