1

我正在尝试对数组中对象的字段进行多次更新。结构如下:

{
rs:[
  {uid:"123", ufc:"bla"},
  {uid:"123", ufc:"foo"}, 
  //...
  ]
}

由于某种原因,只有第一个字段被更新。我读过我必须用multi:true它来解决这个问题,但它仍然是一样的。

我试过了:

db.mycollection.update({"rs.uid": "123"},
                  {$set: {"rs.$.ufc":"test"}},
                  false, true
                  )

和:

db.mycollection.update({"rs.uid": "123"},
                  {$set: {"rs.$.ufc":"test"}},
                  {multi: true}
                  )

可能与嵌套结构有关?谢谢。

4

1 回答 1

2

我认为您遇到了与此问题中提到的相同的问题

. 作为解决方案,要么等待解决以下问题,要么一一更新数组元素。在您的查询中,多意味着更新多文档而不是任何数组字段的项目。查询的工作方式如下:更新所有在 rs 字段中具有 uid“123”的项目的文档。

当然,如果可能的话,作为替代方案,您的架构支持您的 rs 数组的项目的结构本身就是一个文档。

希望这可以帮助

于 2013-09-30T21:42:25.497 回答