Python 从MongoDB中的词典数组中提取和更新词典

Python 从MongoDB中的词典数组中提取和更新词典,python,mongodb,pymongo,Python,Mongodb,Pymongo,我有一个这样的结构: { "id" : 1, "user" : "somebody", "players" : [ { "name" : "lala", "surname" : "baba", "player_place" : "1", "start_num" : "123", "results" : {

我有一个这样的结构:

{
    "id" : 1,
    "user" : "somebody",
    "players" : [
        {
            "name" : "lala",
            "surname" : "baba",
            "player_place" : "1",
            "start_num" : "123",
            "results" : {
                "1" : { ... }
                "2" : { ... },
                ...
            }
        },
        ...
    ]
}
我对MongoDB非常陌生,我只是不知道如何提取特定用户的结果(在本例中是指某人),但还有许多其他用户,每个用户都有一个玩家数组,每个玩家都有许多特定玩家的结果(start_num)

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

record = collection.find(
    {'user' : name}, {'players' : {'$elemMatch' : {'start_num' : start_num}}, '_id' : False}
)
这将为给定用户提取具有特定播放器的播放器。这很好,但现在我需要从结果中得到具体的结果,比如: {'results':{'2':{…}}

我试过:

record = collection.find(
    {'user' : name}, {'players' : {'$elemMatch' : {'start_num' : start_num}}, 'results' : result_num, '_id' : False}
)
当然,这是行不通的。我可以用Python将其转换为列表并提取我需要的内容,但我希望用Mongo中的查询来实现这一点


另外,我需要做什么来替换特定用户特定播放器结果中的特定结果?假设我有一个键为2的新结果,我想替换键为2的现有结果。我可以用与find相同的查询来完成吗?只是用method replace替换method find或find_and_replace?

您可以替换特定的结果,其语法应该是这样的

假设要用键1替换结果

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