从 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。