在 Meteor (MongoDB) 中按索引而不是按值更新数组



在Meteor(服务器端)中,我需要使用以下结构更新文档:

{
  "_id" : ObjectId("..."),
  "foo" : {
    "bar" : [1, 2, 3]
  },
  "owner" : 1
}

我需要按索引而不是按值更新数组值。当我尝试类似的东西时

{owner: 1}, {$set: {'foo.bar.1': 100}}

文档变得像

{
  "_id" : ObjectId("..."),
  "foo" : {
    "bar" : {
      "1": 100
    }
  },
  "owner" : 1
}

这不是我需要的。我可以将文档结构更改为

{
  "_id" : ObjectId("..."),
  "foo" : {
    "bar" : [ 
      {
        "period" : 1,
        "value" : 4000
      }, 
      {
        "period" : 2,
        "value" : 0
      }
    ]
  },
  "owner" : 1
}

,然后使用

{owner: 1, "foo.bar.period": 1}, {$set: {'foo.bar.$.value': 100}}

按预期工作,但我想知道是否有更简单的解决方案。

似乎您只能通过匹配数组元素的值来更新数组元素1

如果你只有数组索引,你就不走运了。最好使用您的第二个示例。

最新更新