Meteor / MongoDB:按索引

时间:2016-08-10 01:25:25

标签: mongodb meteor minimongo

这是我的收藏结构的概述:

{
  profile: {
    first_name: 'Plop',
    surname: 'Plopette',
    ...
  },
  medical_history: {
    significant_illnesses: [
      'Asthma',
      'Diabetes'
    ],
    ...
  }
}

如何访问和更新medical_history.significant_illnesses数组中的某个项目?

我所拥有的是悲惨的失败:

Patients.update(Session.get("current_patient"), {
    $push: {
        "medical_history.significant_surgeries.surgeryIndex": $(event.target).val().trim()
    }
});

注意surgeryIndex是动态的,所以我无法硬编码。

上面的更新代码会产生此错误:

Exception while simulating the effect of invoking '/patients/update'

errorClass {
    error: 409,
    reason: "MinimongoError: can't append to array using string field name [surgeryIndex]",
    details: undefined, message: "MinimongoError: can't append to array using string field name [surgeryIndex] [409]",
    errorType: "Meteor.Error"}

1 个答案:

答案 0 :(得分:3)

最好的方法是将数组取出,修改并使用$set查询进行更新。

如果您真的想按照自己的方式进行操作,则需要$pull数组中的值,然后必须使用$position运算符将其推送到特定索引。

$position运算符在2.6版中引入。如果你使用的是旧版本,据我所知你除了我的第一个建议之外别无其他选择。