动态更新mongoDb文档层次结构中的字段
我正在更新一个集合,该集合具有以下文档结构(此处以2为例): 与上面提到的两个类似,大约有50种不同的文档结构。我需要使用mongodb查询更新动态更新mongoDb文档层次结构中的字段,mongodb,Mongodb,我正在更新一个集合,该集合具有以下文档结构(此处以2为例): 与上面提到的两个类似,大约有50种不同的文档结构。我需要使用mongodb查询更新URL字段值。我在mongodb文档中找不到任何内容。有没有办法从多个文档结构中更新单个字段 任何帮助都将不胜感激 谢谢 好吧,我的尝试绝对疯狂,我不会推荐它,但也许它对你有帮助-我尝试了经典的查询->获取数据->修改文档->更新文档: for key, val in document.items(): if key == "url&q
URL
字段值。我在mongodb文档中找不到任何内容。有没有办法从多个文档结构中更新单个字段
任何帮助都将不胜感激
谢谢 好吧,我的尝试绝对疯狂,我不会推荐它,但也许它对你有帮助-我尝试了经典的查询->获取数据->修改文档->更新文档:
for key, val in document.items():
if key == "url":
print("Do stuff if you want, you can do this on every level")
if isinstance(val, dict):
for sub_key, sub_val in document[key].items():
if sub_key == "url":
print("Do stuff again")
if isinstance(sub_val, dict):
for sub_sub_key, sub_sub_val in document[key][sub_key].items():
# so now we have lists.. this only works if the structure is always like this
for idx, list_entry in enumerate(sub_sub_val):
# check for nested dictionaries again
if isinstance(list_entry, dict):
for sub_sub_sub_key, sub_sub_sub_val in list_entry.items():
# and again
if isinstance(sub_sub_sub_val, dict):
for sub_sub_sub_sub_key, sub_sub_sub_sub_val in list_entry[sub_sub_sub_key].items():
# now were at the level we want to be at
if sub_sub_sub_sub_key == "urls":
# url paths are again stored in a list, ill just access first index
this_val = document[key][sub_key][sub_sub_key][idx][sub_sub_sub_key][sub_sub_sub_sub_key][0]
print(f"Changing extension from from {this_val} to 'something'")
# overwrite value
document[key][sub_key][sub_sub_key][idx][sub_sub_sub_key][sub_sub_sub_sub_key][0] = 'something'
正如你所看到的,我进入了11个缩进级别,只是为了进入4次嵌套字典。未找到任何其他选项来搜索混合列表嵌套字典中的键。祝你好运,期待着一个合适的答案:)
for key, val in document.items():
if key == "url":
print("Do stuff if you want, you can do this on every level")
if isinstance(val, dict):
for sub_key, sub_val in document[key].items():
if sub_key == "url":
print("Do stuff again")
if isinstance(sub_val, dict):
for sub_sub_key, sub_sub_val in document[key][sub_key].items():
# so now we have lists.. this only works if the structure is always like this
for idx, list_entry in enumerate(sub_sub_val):
# check for nested dictionaries again
if isinstance(list_entry, dict):
for sub_sub_sub_key, sub_sub_sub_val in list_entry.items():
# and again
if isinstance(sub_sub_sub_val, dict):
for sub_sub_sub_sub_key, sub_sub_sub_sub_val in list_entry[sub_sub_sub_key].items():
# now were at the level we want to be at
if sub_sub_sub_sub_key == "urls":
# url paths are again stored in a list, ill just access first index
this_val = document[key][sub_key][sub_sub_key][idx][sub_sub_sub_key][sub_sub_sub_sub_key][0]
print(f"Changing extension from from {this_val} to 'something'")
# overwrite value
document[key][sub_key][sub_sub_key][idx][sub_sub_sub_key][sub_sub_sub_sub_key][0] = 'something'