流星:更新对象嵌套两个数组深
Meteor: Update object nested two arrays deep
我有一个名为 fields
的集合,它是 JSON 个对象的数组。这些对象可以有 options
这是另一个 JSON 对象数组。我正在尝试通过 optionId
更新其中一个选项。我试过了,但没用。
Projects.update({
'fields.options._id': optionId
}, {
$set: {
`fields.$.options.$.title`: title
}
}
这确实找到了正确的项目文档,但没有更新它。
您只能对单级数组使用 $
运算符。不支持使用 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 );
});
Source
我有一个名为 fields
的集合,它是 JSON 个对象的数组。这些对象可以有 options
这是另一个 JSON 对象数组。我正在尝试通过 optionId
更新其中一个选项。我试过了,但没用。
Projects.update({
'fields.options._id': optionId
}, {
$set: {
`fields.$.options.$.title`: title
}
}
这确实找到了正确的项目文档,但没有更新它。
您只能对单级数组使用 $
运算符。不支持使用 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 );
});
Source