2013-08-05 24 views
5

我有文件嵌套數組的文檔沒有IDS

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

但這似乎不起作用。

任何想法?

回答

8

你需要生成你的鑰匙編程:

在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}}) 
+0

這正是我想** **應該工作。但我已經嘗試了8種方式形成星期天,它不起作用。我執行了你建議的shell版本,並得到以下結果:'Mon Aug 05 19:46:33.395 JavaScript執行失敗:SyntaxError:意外的標記+' –

+0

該編輯適用於shell。仍然有Python的問題,但這可能是因爲我更習慣於PHP。 –