MongoDB查询出压测所需数据

背景

最近项目的数据库从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是指返回前多少行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值