2012-10-08 35 views

回答

0

是的,这是可能的。如果您发布了一个示例,我可以更具体地向您展示更新查询的外观。但这里有一个镜头:

db.c.update({ A1: value }, { $addToSet: { "A1.$.A2": "some value" }}) 

我还没有真正尝试过这个(我不是一个蒙戈实例的前现在)我要去断电记忆功能,但应该让你非常接近。

8

这里是一个例子。

db.docs.insert({_id: 1, A1: [{A2: [1, 2, 3]}, {A2: [4, 5, 6]}]}) 

如果你知道你要插入的子文档的索引,你可以使用点符号在中间的索引(从0开始):

db.docs.update({_id: 1}, {$addToSet: {'A1.0.A2': 9}}) 

这导致:

{ 
    "A1" : [ 
     { 
      "A2" : [ 
       1, 
       2, 
       3, 
       9 
      ] 
     }, 
     { 
      "A2" : [ 
       4, 
       5, 
       6 
      ] 
     } 
    ], 
    "_id" : 1 
} 
+6

“如果您知道要插入的子文档的索引,” - 如果插入它,您会如何知道索引? – jcollum

0

是的,$ push可以用来做同样的事情。尝试下面给出的代码。

db.c.update({ A1: value }, { $push: { "A1.$.A2": num }});