MongoDB更新不正确的数组元素

时间:2017-11-15 20:00:15

标签: mongodb mongodb-query

您好我有一份包含一些用户记录的文件。

    "profile":{
     "records":[
              {
                "classId":   "LngdsQfL",
                "moduleId":  "5CDEezDJ",
                "sectionId": "nFMu3mwa",
                "dateFinished": "",
                "dateOpened": "2017-11-15T19:48:20.819Z"
              },
              {
                "classId":   "7Smq5sG",
                "moduleId":  "5CDEezDJ",
                "sectionId": "nFMu3mwa",
                "dateFinished": "",
                "dateOpened": "2017-11-15T19:19:08.669Z"
              }
            ]
      }

但是当我尝试更新第二条记录时,查询会更新第一条记录。而第二个保持不变。

 var classId= "7Smq5sG";
 var moduleId = "5CDEezDJ";
 var sectionId = "nFMu3mwa";
 var date = new Date();

Users.update(
              { _id:Meteor.userId() ,

                'profile.records.classId' : classId,
                'profile.records.moduleId' : moduleId,
                'profile.records.sectionId' :  sectionId,
              },{
              $set : { 
                "profile.records.$.dateOpened": date
                }
             });
    }

我错过了什么?

1 个答案:

答案 0 :(得分:2)

尝试按如下方式使用请求:

Users.update(
  {_id:Meteor.userId(),
   'profile.records': {$elemMatch: {
                                     'moduleId': {$eq: moduleId},
                                     'sectionId': {$eq: sectionId},
                                     'classId': {$eq: classId}
                                   }
                      }
  },
  {$set: {'profile.records.$.dateOpened': date}});

它使用$ elemMatch运算符来查找符合多个查询条件的数组元素。