在嵌入式文档中更新新密钥

2024-04-26 09:20:29 发布

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

中的文档数据库之类的它们是:

{ ...,
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'])

然而,这会返回<type 'exceptions.KeyError'>< class 'bson.erros.InvalidDocument' >,我认为这是因为我没有将新键插入嵌入文档的正确方法。我需要为{'$set':{ element['new_key'] :total}找一个替代品,但我被卡住了。谢谢你的帮助。你知道吗


Tags: namein文档idnewfordbage
1条回答
网友
1楼 · 发布于 2024-04-26 09:20:29

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

db.stuff.update({'id':i['id'], 'counts.name':element['name']}, {'$set': {'counts.$.newfield':total}})

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

相关问题 更多 >