2013-05-14 61 views
0

我有以下數據的例子:一個新值添加到陣列,同時保持現有的

{ 
     "id": "2", 
     "items": 
      { 
       "3" : { "blocks" : { "3" : { "txt" : 'xx' } } }, 
       "4" : { "blocks" : { "1" : { "txt" : 'yy'}, "2" : { "txt" : 'zz'} } } 
      } 
     } 

我想讓它,使它看起來像下面的示例數據。只是一個新的價值附加到items.3.blocks.3.txt,同時保持它現有的值:

{ 
     "id": "2", 
     "items": 
      { 
       "3" : { "blocks" : { "3" : { "txt" : 'xx, tt' } } }, 
       "4" : { "blocks" : { "1" : { "txt" : 'yy'}, "2" : { "txt" : 'zz'} } } 
      } 
     } 

我下面運行,但沒有任何區別

dbx.test.update({"_id": ObjectId("5192264c02a03e374e67d7be")}, {'$addToSet': {'items.3.blocks.0.txt': 'tt'}},) 

什麼應該是正確的語法,任何幫助表示讚賞... 問候

+0

我經歷了有趣的情況,我無法再複製...當我運行$ push對items.4.blocks.1.txt它的工作原理和dic返回到...「4」:{「blocks 「:{」1「:{」txt「:['yy','tt']} ...但它仍然不起作用..3.blocks.3.txt – shadows 2013-05-14 17:15:20

回答

0

我沒有意識到,這是一個mongodb | pymongo問題開始。

a = { 
    "id": "2", 
    "items": { 
       "3" : { "blocks" : { "3" : { "txt" : 'xx' } } }, 
       "4" : { "blocks" : { "1" : { "txt" : 'yy'}, "2" : { "txt" : 'zz'} } } 
      } 
    } 

a['items']['3']['blocks']['3']['txt'] += ', yy' 

?關於如何修改類型的字典

較短的答案:

:如果你的數據是JSON字符串你首先需要將其從一個JSON字符串轉換爲Python中的字典

a = {'moo' : 'cow', 'quack' : 'duck'} 
a['moo'] = 'bull' 
a['quack'] = 'duckling' 
print(str(a)) 
if a['moo'] == 'bull': 
    print 'Yes the bull says moo' 

,通過這樣做

import json 
a = json.loads(<your string goes here>) 
+0

其實我不會將它轉換爲減輕負載在系統...我的目標是發揮巨大的數據,即使我們假設轉換負載會很低,我只是沒有它... thx – shadows 2013-05-14 17:20:14

+0

如果這是一個JSON字符串,對不起,你運氣不好編輯,在任何血統辦法。也不覺得是一個好主意開始你的項目:/ – Torxed 2013-05-14 17:29:12

0

您需要使用'$push'而不是'$addToSet'

dbx.test.update({"_id": ObjectId("5192264c02a03e374e67d7be")}, {'$push': {'items.3.blocks.0.txt': 'tt'}},) 
+0

上面的例子推動也是行不通的...因爲它是一個字符串,而不是一個數組...如果它是這樣的'「3 「:{」blocks「:{」3「:{」txt「:['xx']}}}',這將是工作... – shadows 2013-05-14 20:41:17

0

很簡單,對於將與$ addToSet工作需要在陣列[]中的數據,但你必須在{"key":"value"}的數據,但你必須{ "blocks" : { "1" : { "txt" : 'yy'}, "2" : { "txt" : 'zz'} } },建議在陣列工作,例

"items": 
      [ 
       { "algo" : { "blocks" : { "txt" : ['xx']} } } , 
       { "algoo" : { "blocks" : { "txt" : ['yy','zz']} } } 
      ] 
db.foo.update({"_id":1,"items.algo.blocks.txt":'xx'},{$addToSet:{"items.$.algo.blocks.txt":'tt'}}); 

和領域沒有用數字名稱。

{ 
     "_id" : 1, 
     "items" : [ 
       { 
         "algo" : { 
           "blocks" : { 
             "txt" : [ 
               "xx", 
               "tt" 
             ] 
           } 
         } 
       }, 
       { 
         "algoo" : { 
           "blocks" : { 
             "txt" : [ 
               "yy", 
               "zz" 
             ] 
           } 
         } 
       } 
     ] 
} 
相關問題