2013-10-24 47 views
0

我有这样一个文件,蒙戈DB更新子文档 - 子文档不在阵

{ 
    "S" : { 
     "500209" : { 
      "total_income" : 38982, 
      "interest_income" : 1714, 
      "reported_eps" : 158.76, 
      "year" : 201303 
     } 
    }, 
    "_id" : "pl" 
} 

我试图更新此文件尚且如此,

{ 
    "S" : { 
     "500209" : { 
      "total_income" : 38982, 
      "interest_income" : 1714, 
      "reported_eps" : 158.76, 
      "year" : 201303, 
      "yield": 1001, <== inserted a new attribute 
     } 
    }, 
    "_id" : "pl" 
} 

我已经试过了,

db.my_collection.update({_id: 'pl'},{$set: {'S.500209.yield': 1}}) 

但我做不到。我搜索了堆栈溢出和谷歌,但我找不到。

我有这么多的答案,但他们大多数保持子文档在数组中。

请帮我解决我的问题,并请告诉我为什么他们大多数人将子文档保存在数组中。

回答

1

数字键可能导致此问题。更新您的字段名称。

db.my_collection.update({_id: 'pl'},{$set: {'S.a500209.yield': 1}}) 

编辑

升级蒙戈版本。它适用于2.4。

+0

不工作:-)无论如何感谢您的时间。 –

+1

你完全正确。问题是由于数量。我已将该数字更改为字符串并尝试使用。这是工作。 –

+1

正如我猜:)但问题是definetely关于数字字段名称。 S.500209表示S是一个数组,我想要500209个元素。你可以只添加一个前缀到你的“500209”键,并使它像“a500209”?我想,'S.a500209.yield'会起作用。如果任何解决方案没有更改字段名称可用,有人会启发我们 –