如何更新 mongoDB 中特定嵌套字典中的项目
How do I update an item in a specific nested dictionary in mongoDB
我在 MongoDB 中在线存储了 3 部词典,我想访问
特定词典中的特定项目并用不同的项目更新它,但我不知道该怎么做。我尝试了多种方法,但 none 似乎有效。我不想通过字典的索引访问字典中的项目,因为会有更多的字典,我每次都需要编辑代码。我试图用这段代码更新它,但它不起作用。有人知道解决这个问题的方法吗?
@client.command()
async def warn(ctx, user: discord.User, reason: Optional[str] = None):
await ctx.message.delete()
guild_id = ctx.guild.id
warn_id = f"{uid.uuid1()}" # Randomly generated warning ID
if reason is None:
reason = "No reason given!" # reason
warn_count = 1
for i in role_ids:
if role_ids[i]["_id"] == ctx.guild.id:
for _user in range(0, len(role_ids[i]["logs"]["warn_logs"]["users"])):
# if role_ids[i]["logs"]["warn_logs"]["users"][_user]:
if f"{user.id}" in role_ids[i]["logs"]["warn_logs"]["users"][_user]:
for e in range(0, len(role_ids[i]["logs"]["warn_logs"]["users"][_user][f"{user.id}"]["warnings"])):
if f"warning_{warn_count}" in \
role_ids[i]["logs"]["warn_logs"]["users"][_user][f"{user.id}"]["warnings"][e]:
warn_count += 1
pass
else:
# role_ids[i]["logs"]["warn_logs"]["users"][_user][f"{user.id}"]["warnings"][e+1]
my_dict = {"$set": {
f"warning_{warn_count}": {"author": f"{ctx.author.id}",
"reason": reason,
"warn_id": warn_id},
"warning_0":""}}
mongo_col.find_one_and_update({"_id": ctx.guild.id, "logs": {
"warn_logs": {"users": [{f"{user.id}": {"warnings": [{"warning_0": ""}]}}]}}}, my_dict)
所以我找不到解决问题的方法,但我想到了一种替代方法,该方法可能效率不高,但效果很好。我从 mongodb 集合中取出所有数据并将其保存在本地字典变量中,然后将本地变量用于 search/edit 数据并使用“[=13] 将其回传到 mongodb =]”方法。
我在 MongoDB 中在线存储了 3 部词典,我想访问 特定词典中的特定项目并用不同的项目更新它,但我不知道该怎么做。我尝试了多种方法,但 none 似乎有效。我不想通过字典的索引访问字典中的项目,因为会有更多的字典,我每次都需要编辑代码。我试图用这段代码更新它,但它不起作用。有人知道解决这个问题的方法吗?
@client.command()
async def warn(ctx, user: discord.User, reason: Optional[str] = None):
await ctx.message.delete()
guild_id = ctx.guild.id
warn_id = f"{uid.uuid1()}" # Randomly generated warning ID
if reason is None:
reason = "No reason given!" # reason
warn_count = 1
for i in role_ids:
if role_ids[i]["_id"] == ctx.guild.id:
for _user in range(0, len(role_ids[i]["logs"]["warn_logs"]["users"])):
# if role_ids[i]["logs"]["warn_logs"]["users"][_user]:
if f"{user.id}" in role_ids[i]["logs"]["warn_logs"]["users"][_user]:
for e in range(0, len(role_ids[i]["logs"]["warn_logs"]["users"][_user][f"{user.id}"]["warnings"])):
if f"warning_{warn_count}" in \
role_ids[i]["logs"]["warn_logs"]["users"][_user][f"{user.id}"]["warnings"][e]:
warn_count += 1
pass
else:
# role_ids[i]["logs"]["warn_logs"]["users"][_user][f"{user.id}"]["warnings"][e+1]
my_dict = {"$set": {
f"warning_{warn_count}": {"author": f"{ctx.author.id}",
"reason": reason,
"warn_id": warn_id},
"warning_0":""}}
mongo_col.find_one_and_update({"_id": ctx.guild.id, "logs": {
"warn_logs": {"users": [{f"{user.id}": {"warnings": [{"warning_0": ""}]}}]}}}, my_dict)
所以我找不到解决问题的方法,但我想到了一种替代方法,该方法可能效率不高,但效果很好。我从 mongodb 集合中取出所有数据并将其保存在本地字典变量中,然后将本地变量用于 search/edit 数据并使用“[=13] 将其回传到 mongodb =]”方法。