从MongoDB的字典数组中提取和更新一个字典

2024-09-25 10:28:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个结构:

{
    "id" : 1,
    "user" : "somebody",
    "players" : [
        {
            "name" : "lala",
            "surname" : "baba",
            "player_place" : "1",
            "start_num" : "123",
            "results" : {
                "1" : { ... }
                "2" : { ... },
                ...
            }
        },
        ...
    ]
}

我对MongoDB还很陌生,我只是不知道如何为一个特定的user(在这个例子中是“某人”,但是有很多其他用户,每个用户都有一个玩家数组,每个玩家都有很多结果)提取results对于一个特定的playerstart_num

我正在使用pymongo,这是我的代码:

record = collection.find(
    {'user' : name}, {'players' : {'$elemMatch' : {'start_num' : start_num}}, '_id' : False}
)

这将为给定用户提取带有特定播放器的players。这很好,但是现在我需要从results得到具体的结果,如下所示: { 'results' : { '2' : { ... } } }

我试过:

record = collection.find(
    {'user' : name}, {'players' : {'$elemMatch' : {'start_num' : start_num}}, 'results' : result_num, '_id' : False}
)

但这当然行不通。我可以用Python将其转换为list并提取我需要的内容,但我想用Mongo中的query来实现这一点

另外,我需要做些什么来替换results中针对特定用户的特定播放器的特定结果?假设我有一个键为2的新结果,我想替换键为2的现有结果。我是否可以使用与find()相同的查询(只是用方法replacefind_and_replace替换方法find


Tags: 用户nameidfalse玩家findrecordstart
1条回答
网友
1楼 · 发布于 2024-09-25 10:28:54

你可以替换一个特定的结果,它的语法应该是这样的

假设要用键1替换结果

collection.updateOne({
  "user": name,
  "players.start_num": start_num
},
{ $set: { "players.$.results.1" : new_result }})

相关问题 更多 >