使用addToSet在meteor和mongoDB中添加相同的重复进行更新

时间:2016-02-26 10:53:21

标签: mongodb meteor

使用addToSet在meteor和mongoDB中添加相同的复制进行更新。

我的更新功能

let data = Meteor.users.update(Meteor.userId(), {
    $addToSet: {
        "course_teach_list": {
            "course_id": courseId,
            "class_id_list": [],
        }
    }}
)

首次更新:

  "course_teach_list": [
    {
      "course_id": "qziRfZ8GFEW7j3QhL",
      "class_id_list": []
    },
  ]

第二次更新到class_id_list:

  "course_teach_list": [
    {
      "course_id": "qziRfZ8GFEW7j3QhL",
      "class_id_list": [
        "zx9ir93epdddricRM"
      ]
    }
  ]

第三次更新有重复“course_id”:“qziRfZ8GFEW7j3QhL”。我该如何防止这种情况?我认为这是因为class_id_list不再是空的而且不一样,这就是为什么它更新重复的

  "course_teach_list": [
    {
      "course_id": "qziRfZ8GFEW7j3QhL",
      "class_id_list": [
        "zx9ir93epdddricRM"
      ]
    },
    {
      "course_id": "qziRfZ8GFEW7j3QhL",<--duplication! should not update!
      "class_id_list": []
    }
  ]

1 个答案:

答案 0 :(得分:2)

第二个update添加一个&#39;重复&#39; class_id_list,因为class_id_list不同。

如果update中已存在course_id,则可以使用阻止更新的查询对象限制course_teach_list。示例代码如下,

let data = Meteor.users.update(
    {_id: Meteor.userId(), 'course_teach_list.course_id': {$ne: courseId}},
    {$addToSet: {
        "course_teach_list": {
            "course_id": courseId,
            "class_id_list": [],
        }
    }}
)