从 json 文件传递 mongodb 查询以在 python 中执行
Passing a mongodb query from json file to execute in python
我有一个包含大约 50 个查询的 json
文件。
json
文件如下所示:
{
"1": {
"mongodb":"mydb1.mongodbtime.find({\n \"timestamp1\": {\"$gte\": datetime.strptime(\"2010-01-01 00:05:00\", \"%Y-%m-%d %H:%M:%S\"),\n \"$lte\": datetime.strptime(\"2015-01-02 00:05:00\", \"%Y-%m-%d %H:%M:%S\")}},\n {\"id13\":1}),",
"mongodb1index":"mydb1.mongodbindextimestamp1.find({\n \"timestamp1\": {\"$gte\": datetime.strptime(\"2010-01-01 00:05:00\", \"%Y-%m-%d %H:%M:%S\"),\n \"$lte\": datetime.strptime(\"2015-01-02 00:05:00\", \"%Y-%m-%d %H:%M:%S\")}},\n {\"id13\":1}),"
},
"2": {
"mongodb":"mydb1.mongodbtime.find({\n \"timestamp1\": {\"$gte\": datetime.strptime(\"2010-01-01 00:05:00\", \"%Y-%m-%d %H:%M:%S\"),\n \"$lte\": datetime.strptime(\"2015-01-02 00:05:00\", \"%Y-%m-%d %H:%M:%S\")}},\n {\"id13\":1}),",
"mongodb1index":"mydb1.mongodbindextimestamp1.find({\n \"timestamp1\": {\"$gte\": datetime.strptime(\"2010-01-01 00:05:00\", \"%Y-%m-%d %H:%M:%S\"),\n \"$lte\": datetime.strptime(\"2015-01-02 00:05:00\", \"%Y-%m-%d %H:%M:%S\")}},\n {\"id13\":1}),
}
}
我在数据库 mongodbtime
中有两个 collections
,一个名为 mongodbtime
,另一个名为 mongodbindextimestamp1
。
我在 python 中用于传递 query
并执行它的代码如下所示:
mydb1 = myclient["mongodbtime"]
with open("queriesdb.json",'r') as fp:
queries = json.load(fp)
db = {"mongodb": "mongodbtime", "mongodb1index": "mongodbtime"}
for num_query in queries.keys():
query = queries["1"]
print(query)
for db_name in db:
print(db_name)
run(query[db_name])
def run(query):
for j in range(0, 1):
start_time = time.time()
cursor = query
for x in cursor:
pprint(x)
# capture end time
end_time = time.time()
# calculate elapsed time
elapsed_time = end_time - start_time
times.append(elapsed_time)
#elapsed_time_milliSeconds = elapsed_time * 1000
#print("code elapsed time in milliseconds is ", elapsed_time_milliSeconds)
finalmeasurments(times)
我像字符串一样传递它,显然当我 print(cursor)
它只是 print
query
我应该使用另一种形式的文件吗?
关于我应该如何执行 query
的任何想法?
如果您有选择,请重构您的方法。如果您需要 运行 一组测试,请创建一个带有参数的枚举 class 并迭代 class.
如果您必须使用 JSON 文件,请考虑 eval() 但 YMMV。
我有一个包含大约 50 个查询的 json
文件。
json
文件如下所示:
{
"1": {
"mongodb":"mydb1.mongodbtime.find({\n \"timestamp1\": {\"$gte\": datetime.strptime(\"2010-01-01 00:05:00\", \"%Y-%m-%d %H:%M:%S\"),\n \"$lte\": datetime.strptime(\"2015-01-02 00:05:00\", \"%Y-%m-%d %H:%M:%S\")}},\n {\"id13\":1}),",
"mongodb1index":"mydb1.mongodbindextimestamp1.find({\n \"timestamp1\": {\"$gte\": datetime.strptime(\"2010-01-01 00:05:00\", \"%Y-%m-%d %H:%M:%S\"),\n \"$lte\": datetime.strptime(\"2015-01-02 00:05:00\", \"%Y-%m-%d %H:%M:%S\")}},\n {\"id13\":1}),"
},
"2": {
"mongodb":"mydb1.mongodbtime.find({\n \"timestamp1\": {\"$gte\": datetime.strptime(\"2010-01-01 00:05:00\", \"%Y-%m-%d %H:%M:%S\"),\n \"$lte\": datetime.strptime(\"2015-01-02 00:05:00\", \"%Y-%m-%d %H:%M:%S\")}},\n {\"id13\":1}),",
"mongodb1index":"mydb1.mongodbindextimestamp1.find({\n \"timestamp1\": {\"$gte\": datetime.strptime(\"2010-01-01 00:05:00\", \"%Y-%m-%d %H:%M:%S\"),\n \"$lte\": datetime.strptime(\"2015-01-02 00:05:00\", \"%Y-%m-%d %H:%M:%S\")}},\n {\"id13\":1}),
}
}
我在数据库 mongodbtime
中有两个 collections
,一个名为 mongodbtime
,另一个名为 mongodbindextimestamp1
。
我在 python 中用于传递 query
并执行它的代码如下所示:
mydb1 = myclient["mongodbtime"]
with open("queriesdb.json",'r') as fp:
queries = json.load(fp)
db = {"mongodb": "mongodbtime", "mongodb1index": "mongodbtime"}
for num_query in queries.keys():
query = queries["1"]
print(query)
for db_name in db:
print(db_name)
run(query[db_name])
def run(query):
for j in range(0, 1):
start_time = time.time()
cursor = query
for x in cursor:
pprint(x)
# capture end time
end_time = time.time()
# calculate elapsed time
elapsed_time = end_time - start_time
times.append(elapsed_time)
#elapsed_time_milliSeconds = elapsed_time * 1000
#print("code elapsed time in milliseconds is ", elapsed_time_milliSeconds)
finalmeasurments(times)
我像字符串一样传递它,显然当我 print(cursor)
它只是 print
query
我应该使用另一种形式的文件吗?
关于我应该如何执行 query
的任何想法?
如果您有选择,请重构您的方法。如果您需要 运行 一组测试,请创建一个带有参数的枚举 class 并迭代 class.
如果您必须使用 JSON 文件,请考虑 eval() 但 YMMV。