Python 更新嵌入文档中的新密钥

Python 更新嵌入文档中的新密钥,python,mongodb,pymongo,Python,Mongodb,Pymongo,db.stuff中的文档包括: { ..., counts : [ {name: Alice, age: 18, pay: 27}, {name : Jen, age: 23, pay: 56}, ... ] , ... } 我正在使用以下代码尝试一个接一个地更新嵌入的文档。我遍历嵌入的文档,执行计算,然后想在每个单独的子文档中设置一个新键 x = [3, 45, 77, 61, 98, 76, 32, ... ] for i in db.stuff.find(): for el

db.stuff中的文档包括:

{ ...,
counts : [ {name: Alice, age: 18, pay: 27}, {name : Jen, age: 23, pay: 56}, ... ] ,
  ... }
我正在使用以下代码尝试一个接一个地更新嵌入的文档。我遍历嵌入的文档,执行计算,然后想在每个单独的子文档中设置一个新键

x = [3, 45, 77, 61, 98, 76, 32, ... ]

for i in db.stuff.find():
    for element in i['counts']:
        x.append(element['pay'])
        total = 1.0 - ((sorted(x).index(element['pay']) + 1) / float(len(x)))
        db.stuff.update({'id': i['id']}, {'$set':{ element['new_key'] :total}})
        x.remove(element['pay'])
然而,这返回
,我相信这是因为我没有将新密钥插入嵌入文档的正确方法。我需要为
{'$set':{element['new_key']:total}找到一个替换项
,但我被卡住了。感谢您的帮助。

尝试此操作(使用位置参数)


这将在db中查询id=i['id']和counts数组,查找name=element['name']的条目,然后使用“$”将新的key/val对添加到第一个匹配的子文档中

也许我遗漏了什么,但最终的数据应该是:{…,counts:[{name:Alice,age:18,pay:27,new_key:total},{name:Jen…new_key:total2}]}?@iamalexillight是的,绝对是
db.stuff.update({'id':i['id'], 'counts.name':element['name']}, {'$set': {'counts.$.newfield':total}})