在使用mongodb的meteorjs中,如何在嵌套数组

时间:2016-03-19 11:44:36

标签: mongodb meteor mongodb-query

如何使用meteorjs在mongodb的更新语句中将ans更改为其他int并在retry中将courseList.quizScore增加1?

下面是我的查询哪个不行,我正在使用$ set,这是正确的操作使用吗?我可以在一个更新语句中使用$ set和$ inc吗?

collection.jsx

Meteor.users.update({
    _id: Meteor.userId(),
    "courseList.courseId": courseId,
    "courseList.quizScore.qnNum": qnNum,
}, {
    $set: {
        "courseList.quizScore.$.ans": selectedAns
    }
})

MongoDB的

{
  "_id": "yo8Mi2jKtoNSzgLDL",
  "courseList": [
    {
      "courseId": "nJmu5HW7g3wjWo47P",
      "classId": "3RniSRC3NurDRwZ2x",
      "quizScore": [
        {
          "qnNum": 0,
          "ans": 0,
          "retry": 1
        },
        {
          "qnNum": 1,
          "ans": 0,
          "retry": 1
        }
      ],
      "status": "Not Started"
    },
    {
      "courseId": "5ge2grte3wjWo4rh",
      "classId": "bffbeRC3NurDRtbf",
      "quizScore": [
        {
          "qnNum": 0,
          "ans": 1,
          "retry": 1
        },
        {
          "qnNum": 1,
          "ans": 2,
          "retry": 3
        }
      ],
      "status": "Not Started"
    }
  ]
}

1 个答案:

答案 0 :(得分:1)

数据中的数组中有一个数组,除非您知道要更新的子数组中的位置,否则没有简单的方法可以引用嵌套的子数组quizScore

您可以通过courseList访问外部数组$,并通过位置访问内部数组quizScore。以下是一个示例代码,用于在一个更新语句中使用quizeScorecourseId更新匹配$set的{​​{1}}的第一个元素。

$inc