Итак, я хочу разделить фильтр и обновить параметр для MongoDB вместо одного метода, доступного в библиотеке Pymongo.
{filter}, {update}
передается мне из файла, одна пара на строку
Например: {"k1":"v1"}, {"k1":"v1", "k2":"v2", "k3":"v3"}
Что я хочу сделать?
Разделите их так, чтобы я получил две переменные dict,
filter = {"k1":"v1"}
update = {"k1":"v1", "k2":"v2", "k3":"v3"}
Что я пробовал?
Проблема в том, что я не хочу менять исходный формат, и если я разделю их, используя «,», то это может внезапно разделиться, я также не могу рассчитывать на разделение при первом появлении «,», поскольку сама часть фильтра может иметь несколько ","
def data_replace_one(host, port, dbname, coll_name, file_path, authdb):
if LOCALHOST:
client = pymongo.MongoClient(host, port)
else:
print("Enter credentials:")
uname = input("Username: ")
pwd = getpass.getpass()
client = pymongo.MongoClient(
host, port, username=uname, password=pwd, authSource=authdb)
db = client[dbname]
coll = db[coll_name]
with open(file_path) as in_file:
list_dict_queries = [line.strip() for line in in_file]
list_dict_queries = list(filter(None, list_dict_queries))
for query in list_dict_queries:
query_list = query.split("|")
query_list[0] = query_list[0].strip()
query_list[1] = query_list[1].strip()
#print(literal_eval(query_list[0]), literal_eval(query_list[1]))
coll.replace_one(literal_eval(
query_list[0]), literal_eval(query_list[1]))