在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
如果你只有数组索引,你就不走运了。最好使用您的第二个示例。