mongoDB初探-SQL编写

    技术2022-07-21  77

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

    Processed: 0.010, SQL: 9