连接方式:
1.工具连接,百度下载。 如:Robomongo
2.命令连接。
方式1:
mongo mongodb://username:pwd@ip:port/db.
方式2:
a. mongo 进入后默认到test库
b. use db 如: use hyb
c. db.auth('username','pwd')
该操作必须要在use db之后进行
一、 基本查询说明
A. 查询table中d7_1列内容中包含"故障"两个字时间大于1562641348的值
db['table'].find({"d7_1":{"$regex":"故障"},time":{"$gt":1562641348}})
db['table'].find({"d7_1":/故障/,"time":{"$gt":1562641348}})
B. 查询table中所有数据,只显示包含3级故障的内容
db['table'].find({},{"d7_1":/3级故障/})
C.查询table表中前500条数据
db['table'].find().limit(500)
D.查询table表中第3-500条数据
db['table'].find().skip(2).limit(500)
备注: skip 效率很低,不建议在大数据量的情况使用。
E.查询table表所有数据,按time排序。1升序,-1降序
db['table'].find().sort({"time":1})
F.查询table表中d7_1列内容以"故障"开头的数据
db['table'].find({"d7_1":/^故障/})
G.查询table表中d7_1列内容以"故障"结尾的数据
db['table'].find({"d7_1":/故障$/)
二、 导出文件
导出说明
1.-h(host)
2.-u(username)
3.-p(pwd) -d(db)
4.-c(collection)
5.-f(fields要导出的列,不填导出全部)
6.-o(导出文件名)
7.–csv(导出文件格式)
8.-p (筛选条件,未测试)
具体使用方法可以参考 mongoexport --help 或者 man mongoexport
mongoexport -h 127.0.0.1 -u usename -p 123456 -d db -c collection -f fields -p '{"vin":"1234124"}' -o xxx.csv --csv
三、 mongo 基本语法说明
db.COLLECTION_NAME.function();
db 通常为固定写法,COLLECTION_NAME为表名(该写法表不能以数字开头),function 为mongo中的函数(find,count,insert,drop等).
db['COLLECTION_NAME'].function();
表为数字开头的写法.
db.COLLECTION_NAME.insert({ title:'标题', body:'内容', foot:'页脚' });
所有函数中,括号里都是Json格式,并且mongo里的函数可以使用变量.如:
tempValue = ({ title:'标题', body:'内容',foot:'页脚',list:[1,2,3]});
db.COLLECTION_NAME.insert(tempValue);
四、 操作符
在mongo中定义了一些和$相关的常量(我是这样认为的).举例常用:
- $gt 大于
- $gte 大于等于
- $lt 小于
- $lte 小于等于
- $ne 不等于
- $eq 等于
使用示例:
db['table'].find("time":{"$gt":1562641348,"$lt":1562641349})
$type
返回指定列的匹配数据类型的值,具体数字对应类型自行百度.如:
db['table'].find({"d7_1":{"$type":2}
返回d7_1是string类型的数据
$regex
正则表达式操作符,不赘述.
五、管道聚合aggregate
db[‘table’].aggregate(pipeline,options)
A.分组管道实例
1.求和
db['table'].aggregate([{$group : {_id : "$vin", num : {$sum : "$cmd"}}}])
根据VIN分组,对cmd进行求和
2.计算平均值
db['table'].aggregate([{$group : {_id : "$vin",num : {$avg : "$cmd"}}}])
3.最小值
db['table'].aggregate([{$group : {_id : "$vin",num : {$min : "$cmd"}}}])
4.最大值
db['table'].aggregate([{$group : {_id : "$vin",num : {$max : "$cmd"}}}])
5.插入值到一个数组中
db['table'].aggregate([{$group : {_id : "$vin", url : {$push: "$list"}}}])
6.插入值到一个数组中,但不创建副本
db['table'].aggregate([{$group : {_id : "$vin", url : {$addToSet : "$list"}}}])
7.获取第一个文档数据
db['table'].aggregate([{$group : {_id : "$vin", first_url : {$first : "$list"}}}])
8.获取最后一个文档数据
db['table'].aggregate([{$group : {_id : "$vin", last_url : {$last : "$list"}}}])
B. 管道操作符
1.$geoNear
2.$group
实际聚合
3.$limit
限制从当前位置开始的给定数量的文档数量
4.$match
输出符合条件的文档
db['table'].aggregate({$match:{time:{"$gt":1562642464,"$lt":1562642485}}})
显示在这个范围内的数据
5.$project
1表示要该字段,0表示不要该字段,也可以对返回的字段进行重命名,比如将title改为articleTitle
db['457B'].aggregate({$project:{" _id":0,"vin":1,"cmd":1,"time1":"$time"}});
显示vin和cmd,把time更名为time1(只针对结果,类似mysql别名)
6.$skip
跳过
7.$sort
排序
8.$unwind
拆解数据
其实管道就是,把之前返回的数据,给到下一阶段使用,可以看成是在做层层筛选。。
六、附录
日期表达式
$dayOfYear
: 返回该日期是这一年的第几天(全年 366 天)。
$dayOfMonth
: 返回该日期是这一个月的第几天(1到31)。
$dayOfWeek
: 返回的是这个周的星期几(1:星期日,7:星期六)。
$year
: 返回该日期的年份部分。
$month
: 返回该日期的月份部分( 1 到 12)。
$week
: 返回该日期是所在年的第几个星期( 0 到 53)。
$hour
: 返回该日期的小时部分。
$minute
: 返回该日期的分钟部分。
$second
: 返回该日期的秒部分(以0到59之间的数字形式返回日期的第二部分,但可以是60来计算闰秒)。
$millisecond
:返回该日期的毫秒部分( 0 到 999)。
$dateToString
:{ $dateToString: { format: , date: } }
。
使用方法:
db['table'].aggregate([{$match:{"id":"99999"}},{$project:{"年份":{$year:"$time"},"月份":{$month:"$time"},"一年中第几周":{$week:"$time"},"日期":{$dayOfMonth:"$time"},"星期":{$dayOfWeek:"$time"},"一年中第几天":{$dayOfYear:"$time"},"时":{$hour:"$time"},"分":{$minute:"$time"},"秒":{$second:"$time"},"毫秒":{$millisecond:"$time"},"自定义格式化时间":{$dateToString:{format:"%Y年%m月%d %H:%M:%S",date:"$time"}}}}])
上面的命令,需要先执行一条插入,我们本身的车辆写入是没有时间格式的。
db['table'].insert({'time':new Date(),"id":"99999"})
逻辑表达式
$cmp
如果第一个参数大于第二个参数返回正数,第一个参数小于第二个则返回负数,也可以利用$strcasecmp
来比较字符串(中文无效):
db['457B'].aggregate({$project:{test:{$cmp:["1","2"]}}})
上面说的
$eq/$ne/$gt/$gte/$lt/$lte
适用。另外还有:
$and
中的每个参数都为true时返回true
$or
则表示参数中有一个为true就返回true
$not
则会对它的参数的值取反
$cond
第一个参数如果为true,则返回trueExpr,否则返回falseExpr.
$ifNull
第一个参数如果为null,则返回replacementExpr,否则就返回第一个参数。