更新嵌入文档中的新密钥

时间:2012-12-03 23:04:23

标签: 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 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}的替代品,但我被卡住了。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

试试这个(使用位置参数)

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

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