背景
最近项目的数据库从oracle迁移到mongoDB,需要做创建订单的压测,那么就需要先把产品的ID查询出来,作为创建订单的入参,oralce直接就是列表形式,比较方便,但是mongo是json形式,不好直接用命令行提取数据。
方法一
找到安装mongoDB的机器,cmd到mongoDB安装包的bin目录下,执行以下命令行
mongoexport -d database -c collection -f _id,status, sailingProductRouteSchedule.serviceCode, sailingProductRouteSchedule.vesselName, sailingProductRouteSchedule.voyageNo, sailingProductRouteSchedule.direction --type==csv -o D:\\users.csv
参数的意思分别是:
-d database 表示数据库
-c collection 表示数据集合(在关系型数据库中叫数据表)
-f field 表示字段,需要导出哪些字段,就将哪些字段列出来
--type 表示导出类型,导出为csv类型文件
-o 表示将数据导出的路径,由用户自定义即可
因为不知道mongoDB安装在哪台机器上,也没有暴露出来,只能去找DBA协助,但是DBA又很难找得到人,于是开始迂回战术,曲线救国
方法二
使用python连接mongoDB然后查询出有效的产品数据,并保存到excel里
第一步,安装pymongo
pip install pymongo
第二步,连接mongoDB,并查询数据,代码如下:
import openpyxl
import pymongo
uri = "mongodb://username:password@serverip1:port,serverip2:port,serverip3:port/database"
mongodbClient = pymongo.MongoClient(uri)
# 我这里的database就是database
db = mongodbClient.database
# 库中的集合 collection_collection, 有以下两种方式调用,collection 为集合名字
# collection_collection = db.collection
collection_collection = db['collection']
# collection_collection.find({},{}).limit() 见下方详细解析
products_data = collection_collection.find({"status": 'PUBLISHED','hierarchyType.productCntrType':'GENERAL','hierarchyType.termType':'SHORT_TERM','hierarchyType.channelType':'GENERAL','sailingProductProperties.productType':'IP'}, {"_id":1,"sailingProductRouteSchedule.serviceCode":1,"sailingProductRouteSchedule.vesselName":1,"sailingProductRouteSchedule.voyageNo":1,"sailingProductRouteSchedule.direction":1,"sailingProductRouteSchedule.por.cityFullNameCn":1,"sailingProductRouteSchedule.fnd.cityFullNameCn":1}).limit(300)
wb = openpyxl.load_workbook("D:\\微服务查询类结果\\微服务压测产品数据.xlsx")
sheet = wb['Sheet1']
row = 2
for product_data in products_data:
# 一行记录
print(product_data)
sheet.cell(row, 1).value = str(product_data['_id'])
sheet.cell(row, 2).value = str(product_data['sailingProductRouteSchedule']['serviceCode'])
sheet.cell(row, 3).value = str(product_data['sailingProductRouteSchedule']['vesselName'])
sheet.cell(row, 4).value = str(product_data['sailingProductRouteSchedule']['voyageNo'])
sheet.cell(row, 5).value = str(product_data['sailingProductRouteSchedule']['direction'])
sheet.cell(row, 6).value = str(product_data['sailingProductRouteSchedule']['por']['cityFullNameCn'])
sheet.cell(row, 7).value = str(product_data['sailingProductRouteSchedule']['fnd']['cityFullNameCn'])
row = row + 1
wb.save("D:\\微服务查询类结果\\微服务压测产品数据.xlsx")
# 关闭
mongodbClient.close()
知识点详解:
1、collection_collection.find({},{}).limit()
find是查询语句,第一个大括号里是查询条件,相当于where条件,
第二个大括号里是要返回的字段,为1就是返回,为0就是不返回,其它没有写的字段就是这个配置的相反行为,但是不允许同时存在1和0,
limit是指返回前多少行。