如何在Pymongo中将序号位置传递到更新文档以进行$ inc更新

时间:2013-08-05 22:12:28

标签: mongodb pymongo

我有一个文档,其中包含没有ID的嵌套文档数组

_id: adsjfdsau7Hukad,
'nested':[{ a:'123456',b:'zzzzzzzzz'},
          {a:'788123',b:'6yuuuuuu'},
          {a:'123456',b:'ooo998uj'}] 

我想在已标识文档的指定元素中增加一个新属性“c”。例如:

db.collection.update({_id:'adsjfdsau7Hukad'},{$inc:{'nested.2.c':1}})

当我可以显式写入元素序号位置标识符时,这是有效的。但是,我需要为元素顺序位置传递一个变量,而我还没有找到一种方法。我试过这个:

var num = 4 ## as example
db.collection.update({_id:'adsjfdsau7Hukad','nested.$': num},{$inc:{'nested.$.c':1}})

但这似乎不起作用。

有什么想法吗?

1 个答案:

答案 0 :(得分:9)

您需要以编程方式生成密钥:

在shell中:

var num = 4;
var inc = {};
inc['nested.' + num + '.c'] = 1;
db.collection.update({_id: 'adsjfdsau7Hukad'}, {$inc: inc})

在pymongo:

num = 4
db.collection.update(
    {'_id': 'adsjfdsau7Hukad'},
    {'$inc': {'nested.' + str(num) + '.c': 1}})
相关问题