c# 获取excel单元格公式结果_Shell脚本获取MongoDB命令结果导出Excel

   同MySQL数据库类似,MongoDB也可通过mongo客户端命令连接到mongo服务器来进行日常管理。这个命令行工具就是mongo,通过mongo命令可以连接在linux shell或者mongo shell下执行脚本,特别指出的是mongo通过JavaScript脚本的方式来处理数据及管理mongodb。本文就平常工作过程中会遇到需要导出一些mongo查询数据用作分析,通过shell脚本获取mongo命令输出并导出excel表格过程:写个js脚本,mongo执行,重定向输出到文件,再转成xls格式。使用的mongo版本3.6.10。

在shell脚本里面执行mysql命令相对比较简单,后续会再写关于mysql数据查询导出成excel表格,此处按下不表,且听下篇分解e7189cd3c8a9a86554d0dc3c17ac020b.png,mongodb通过shell脚本获取输出,必须使用print()或printjson()语句,否则MongoDB将对脚本的任何输出保持静默。

在命令行交互模式中 mongo将所有的结果打印出来,在JavaScript脚本中使用print()或者printjson()方法来返回JSON格式。

查找官网下表将最常见的mongo shell帮助命令一一对应它的JavaScript脚本

f28a7932bff53dd7de1772b855f8363f.png

以下介绍shell命令行方式运行mongo命令

1、通过--eval的方式传入JavaScript脚本:

命令增加--quiet 参数去掉一些无关的输出

[root@xxxx-test mongo]# mongo192.168.xx.xx:27017/db_name --username --password --quiet --eval"printjson(db.adminCommand('listDatabases'))"

c7223cafa4e7c379264db8dd2d461b69.png

2、通过mongodb交互式命令行运行该脚本。可以在函数中添加mongo命令以方便调用它们。像以下这样创建脚本:

[root@xxxx-test mongo]# cat example.js

var example = function(){

   printjson(db.getUsers())

}

9d8188bca8b4fe1c2457c3335ff7f11a.png

将上面的内容保存到名为example.js的文件中,然后从mongo shell输入:

> load('/root/oms/mongo/example.js')

> example() #输入example()来调用该功能

这样可以整合很多包含类似这样的mongo命令的数据处理脚本。

a0c6fcbf211a13910860afe8f2a823f2.png

3、通过将命令放到javascript文件(.js结尾)并使用mongo命令来运行它:

[root@xxxx-test mongo]# cat example.js

var cmd = db.getUsers()

printjson(cmd)

[root@xxxx-test mongo]# mongo192.168.xx.xx:27017/db_name --username --password --quiet example.js

2f8bf4117a723547dd1817de6673822d.png

了解了以上在shell中执行mongo命令的方式,接下来在脚本中进行运用:

#!/bin/bash#mongo查询导出excelSTART_DATE=$1 #开始时间END_DATE=$2 #结束时间PAGE_PATH=$3 #页面参数#mongo存储时间是标准时间,与北京时间相差八小时#2020-03-13T08:55:00.000Z mongo存储时间格式#2020-03-13T09:05:00.000Z mongo存储时间格式#1238008166666606017if [ $# -ne 3 ];then  echo -e "\033[31mthe number of parameters is not correct: sh $0 param1 param2 param3\033[0m"  exit 1fi#该js脚本是查询指定时间范围内的数据cat > /root/oms/mongo/goods_data.js<#变量符号前加转义符"\"是为了防止写入js文件过程当中去寻找相应变量,即进行原样输入var cmd =db.getCollection('mongo_activity_event').aggregate([    {        \$match: {            event: 66666, //定义筛选规则            pageName: 'MongoJSDetail', //筛选指定的访问页面            pagePath: {\$regex:/${PAGE_PATH}/}, //指定页面参数            create_time:{"\$gte":ISODate('${START_DATE}'),\$lt:ISODate('${END_DATE}')} //指定时间范围        }    },    {        \$group: {           _id: {               'login_name':'\$login_name',                'member_name':'\$member_name',               'merchant_name':'\$merchant_name'          }        }    },    {        \$project: {            'loginName':'\$_id.login_name',            'memberName':'\$_id.member_name',            'merchantName':'\$_id.merchant_name',            _id: 0        }    }])//js写的很丑陋,请轻喷,满足要求即可(难得前端大神有空指导一下)print('账户名称\t会员名称\t所属商家')while(cmd.hasNext()) {    var row = cmd.next();      var temp = '';      if(row['loginName'] != null && row['loginName'] !=undefined && row['loginName'] != '' ){temp=temp +row['loginName']+ "\t"} else{temp+="N/A\t"}      if(row['memberName'] != null && row['memberName'] !=undefined && row['memberName'] != '' ){temp=temp +row['memberName']+ "\t"} else{temp+="N/A\t"}      if(row['merchantName'] != null && row['merchantName'] !=undefined && row['merchantName'] != '' ){temp=temp +row['merchantName']+ "\t"} else{temp+="N/A\t"}      print(temp);}EOFMONGO_CONN="192.168.xx.xx:27017/db_name"source /etc/profilecd /root/oms/mongomongo ${MONGO_CONN} --username  --password  --quiet /root/oms/mongo/goods_data.js > goods_data.txt#txt2excel.py是txt转换excel的python脚本,资源很容易能找到,这里不再贴出来,生成good_data.xls文件python /root/oms/txt2excel.py /root/oms/mongo/goods_data.txt goods_data

goods_data.xls数据类似如下:0dcbcb08630dde7883689e698a505e56.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值