gpt4 book ai didi

python - 使用 pymongo 更新一个状态中的查找结果

转载 作者:行者123 更新时间:2023-12-01 09:17:01 24 4
gpt4 key购买 nike

我有一个这样的函数:

def max_number(list_):
dict_ = {
"a": 1,
"b": 2,
"c": 3,
"d": 4
}
list_ = [dict_[i] for i in list_]
return max(list_)

db.test.find()返回:

{"name": "name1", "level": ["a", "d"]}
{"name": "name2", "level": ["c"]}
{"name": "name3", "level": ["a", "c"]}

现在我想使用函数 max_number 获取每条记录的最大级别,更新后的结果应如下所示:

{"name": "name1", "level": ["a", "d"], "max": 4}
{"name": "name2", "level": ["c"], "max": 3}
{"name": "name3", "level": ["a", "c"], "max": 3}

我知道我可以使用find(),然后使用for循环一一更新它。但我想知道是否有一种方法可以帮助我在一个语句中完成这项任务,就好像我有一个很大的收集,用 for 循环完成这项任务可能会很慢。

该语句可能如下所示:

db.test.update_many({}, {"$set": {"max": max_number(result.level)}})

最佳答案

根据您在问题中提到的信息。以下解决方案可以完成这项工作。

cursor_list=list(db.test.find())
# cursor_list=[{"name": "name1", "level": ["a", "d"]},{"name": "name2", "level": ["c"]},{"name": "name3", "level": ["a", "c"]}]
value_l=[d["level"] for d in cursor_list]
# value_l=[['a', 'd'], ['c'], ['a', 'c']]

name_l=[d["name"] for d in cursor_list]

dict_ = {
"a": 1,
"b": 2,
"c": 3,
"d": 4
}

def replace_matched_items(word_list, dictionary):
"""maps the value in sublist to the dict values"""

new_list = [[dictionary.get(item, item) for item in lst] for lst in word_list]
return new_list

list_ = replace_matched_items(value_l, dict_)
# list_=[[1, 4], [3], [1, 3]]
max_value=[max(l) for l in list_]
# max_value=[4, 3, 3]
# it updates to the field "max" wrt to the "name" field which I supposed is unique
for i in range(len(value_l)):
db.test.update({"name": name_l[i]}, {"$set": {"max": max_value[i]}})

关于python - 使用 pymongo 更新一个状态中的查找结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51153221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com