【问题标题】:Can we write Mongo DB query in GraphiQL?我们可以在 GraphQL 中编写 Mongodb 查询吗?
【发布时间】:2021-04-20 16:41:38
【问题描述】:

我想知道是否可以使用 Mongo DB 查询来过滤 GraphiQL 中的数据。

实际上,我用 PyMongo、flask 和 GraphiQL 制作了一个 API。

Ex - 在集合内的 Mongo DB 中,我有以下 5 个文档 -:

Mongo DB 中的数据

{"_id":{"$oid":"5ff6ad894d0d2a1c6ce0fc3d"},
"Serial_No":"1111",
"Time_Record":"2020-05-01 06:00:00"
} 

{"_id":{"$oid":"5ff6ad894d0d2a1c6ce0fc3l"},
"Serial_No":"1111",
"Time_Record":"2020-05-01 06:01:00"
} 

{"_id":{"$oid":"5ff6ad894d0d2a1c6ce0fc3e"},
"Serial_No":"1111",
"Time_Record":"2020-05-01 06:02:00"
} 

{"_id":{"$oid":"5ff6ad894d0d2a1c6ce0fc3z"},
"Serial_No":"1111",
"Time_Record":"2020-05-01 06:03:00"
} 

{"_id":{"$oid":"5ff6ad894d0d2a1c6ce0fc3v"},
"Serial_No":"1111",
"Time_Record":"2020-05-01 06:04:00"
} 

现在在不使用 GraphiQL 的情况下,我在 MongoDB 中执行以下查询,以过滤“2020-05-01 06:00:00”和“2020-05-01 06”之间“Serial_No”、“Time_Records”上的数据: 04:00",分页的大小限制 = '2' & skip = '1'。

def get_filter_data(Serial_No, from_date , to_date ,number_limit,number_skip):
    data = coll.find({"Serial_No": Serial_No, "Time_Record" : {'$gt': from_date , '$lt': to_date}}).limit(number_limit).skip(number_skip)
    for col in data:
        pprint.pprint(col)
    print("Count is : ", number_limit)
    return data

我很开心!!!

它可以工作并提供所需的输出-:

执行上述 Mongo 查询后得到的正确输出:

{"_id":{"$oid":"5ff6ad894d0d2a1c6ce0fc3e"},
"Serial_No":"1111",
"Time_Record":"2020-05-01 06:02:00"
} 

{"_id":{"$oid":"5ff6ad894d0d2a1c6ce0fc3z"},
"Serial_No":"1111",
"Time_Record":"2020-05-01 06:03:00"
} 

现在我想在 GraphiQL 中获得相同的输出

基本上,我不确定如何使用此查询,尤其是如何在 GraphiQL 中提及这部分 {'$gt': from_date, '$lt': to_date}

coll.find({"Serial_No": Serial_No, "Time_Record" : {'$gt': from_date , '$lt': to_date}}).limit(number_limit).skip(number_skip)

【问题讨论】:

    标签: mongodb graphql mongodb-query pymongo graphiql


    【解决方案1】:

    我建议使用来自 mongodb Official Doc 的 GraphQL 原生支持 其中还包括Custom Resolver

    【讨论】: