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

时间:2014-03-01 13:11:51

标签: mongodb meteor

在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 个答案:

答案 0 :(得分:0)

似乎你只能通过匹配它的值1

来更新数组元素

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