最近业务线开始使用mongoDB,先来找一个查数据的工具,我选用了NoSQLBooster for MongoDB.exe(官网免费下载很方便)
打开后,把开发给的链接地址,贴到fast connector中去,像这样的顺序,先做好测试,再链接
登录成功后,开始自己的sql创作。
先来个简单的:
db.table.find({
rowkey: "XXXXX"
})
.sort({
timestamp: -1
})
.limit(100)
这条命令类似于:select * from table where rowkey = "XXXXX" order by timestamp desc limit 100;
再来个聚合类的:
db.table.aggregate(
[{$group : {_id : "$rowkey", time: {$max : "$timestamp"}}}])
.limit(100)
这条命令类似于:select rowkey as _id,max(timestamp) as time from table group by rowkey limit 100;
还可以和JS做一次结合(mongoshell里面就可以用):
eg:把看不懂的时间戳,转成看得懂的日期(我是干测试的,这种转换可以方便我定位问题)
db.table.find({"rowkey":"XXXXXXXX"}).sort({"timestamp":-1}).forEach(function(a) {
function tran_val(val){
if(parseInt(val)<10){
val="0" +val;
}
return val;
}
var datenew = new Date(a["timestamp"]);
var year=datenew.getFullYear();
var month=tran_val(datenew.getMonth()+1);
var date=tran_val(datenew.getDate());
var hour=tran_val(datenew.getHours());
var minute=tran_val(datenew.getMinutes());
var second=tran_val(datenew.getSeconds());
var datastr=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
a["convert_to_date"]=datastr
printjson(a)
})
效果如下:
但是这种输出方式,就已经不是document类型了,只是单纯的日志输出。(只是方便看看而已,想再做点加工?那估计是不行的了)
又找了找文档,发现有project用法
db.table.aggregate(
{
"$project": {
"queryStatus": "$queryStatus",
"rowkey": "$rowkey",
"input":"$input",
"channelSource": "$channelSource",
"timestamp": { "$add": [new Date(0), "$timestamp"] },
}
},
{
"$project": {
"queryStatus": "$queryStatus",
"rowkey": "$rowkey",
"input":"$input",
"channelSource": "$channelSource",
"timestamp": {
"$dateToString": {
date: "$timestamp",
format: "%Y-%m-%d %H-%M-%S",
}
},
}
}
)
这下就可以正常输出成document形式了,但是冗余的部分怎么搞,我也不太清楚。。。
检查的时候发现,原来mongodb的默认时间是格林威治时间,所以又加了一点东西。
"timestamp": {
"$dateToString": {
date: {$add:["$timestamp",8 * 3600]},
format: "%Y-%m-%d %H:%M:%S"
}
又查了官网文档,高版本的sql客户端里面已经支持了timezoom字段,直接使用即可。但我这个太低了,用不了