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 }})