mongoDB初探-SQL编写

最近业务线开始使用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字段,直接使用即可。但我这个太低了,用不了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值