流星收集挂钩更新元素在数组中的位置上

时间:2018-09-04 09:43:21

标签: javascript mongodb meteor meteor-collection-hooks

我有这个对象:

card: { customFields [ { id, value }, {id , value } ... ] }

customFields数组位于卡片内部,包含由id和值组成的元素。

现在我想更新数组中的某个元素,可以通过执行以下操作来完成:

  modifier.$set.customFields.0.value = x

但是我只有一个变量具有索引号,所以我尝试了:

const index = getTargetIndex();
modifier.$set.customFields[index].value = x

但是没有用...

我必须在修饰符中添加什么。$ set以更新此数组中的元素?

替代解决方案:如果可以通过使用ID对值进行更新,则我具有数组中元素的ID。

2 个答案:

答案 0 :(得分:1)

找到了解决方案:

modifier.$set[`customFields.${  index  }.value`]

答案 1 :(得分:0)

您似乎需要使用第二次更新:

update(selector, modifier, options, callback) {
  let i = 1;
  let val = 20;

  // The field in the array you want to modify
  let _modifier = {$set: {"customFields.$.value": val}}; 

  // The selector for main element and the array element
  let _selector = Object.assign(selector, {"customFields.id": i}); 

  // Update the array
  super.update(_selector, _modifier);

  // Continue with the actual update
  return super.update(selector, modifier, options, callback);
}

我假设在同一个挂钩中两次调用super.update()是安全的。