我有一个名为fields
的密钥集合,它是一个JSON对象数组。这些对象可以有options
,这是另一个JSON对象数组。我正在尝试按optionId
更新其中一个选项。我尝试了这个,但它不起作用。
Projects.update({
'fields.options._id': optionId
}, {
$set: {
`fields.$.options.$.title`: title
}
}
这确实找到了正确的Project文档,但没有更新它。
答案 0 :(得分:2)
您只能将$
运算符用于单级数组。不支持使用array1.$.array2.$.key
。
但是,如果您知道要在阵列中更新的元素的确切索引,则可以像这样更新:
Projects.update({
'fields.options._id': optionId
}, {
$set: {
`fields.0.options.1.title`: title
}
}
这是更新的一种方式:
Projects.find({"fields.options._id":optionId}).forEach(function(record) {
var match = false;
// iterate fields array
for(var i=0; i< record.fields.length; i++){
// iterate options array
for(var j=0; j<record.fields[i].options.length; j++){
if(record.fields[i].options[j]._id == optionsID){
record.fields[i].options[j].title = title;
match = true;
// break;
}
}
}
if (match === true) Projects.update( { 'fields.options._id': optionId }, record );
});