Экспресс-сервер: клонировать существующий документ в другую коллекцию - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть коллекция, которая называется «Задачи».

const TaskSchema = new mongoose.Schema({
 task_name:{
    type: String,
    required: true,
    minlength: 1,
    unique: true,
},
task_category: String,
task_xpreward: Number,
task_completed: Boolean,
task_difficulty: Number,  //1 = Easy, 2 = Medium, 3 = Hard, 4 = Very Hard, 5 
= Impossible
task_solution: String,
task_city : String
});

Это действует как совокупность задач, из которых пользователь может выбирать.Когда пользователь нажимает на определенную задачу (чтобы ее получить).

Он должен быть клонирован в другую коллекцию под названием «Taskuser».Эта коллекция действует как пул задач, назначенных определенному идентификатору пользователя.

const TaskuserSchema = new mongoose.Schema({
task_name:{
    type: String,
    required: true,
    minlength: 1,
    unique: true,
},
userId: {
    type: mongoose.Schema.Types.ObjectId,
    required: true,
  },
task_category: {
    type : String,
    required : true,
},
task_xpreward: {
    type : Number,
    required : true,
},
task_completed: {
    type : Boolean,
    required : true,
},
task_difficulty: {
    type : Number,
    required : true,
},                     //1 = Easy, 2 = Medium, 3 = Hard, 4 = Very Hard, 5 = Impossible
task_city : {
    type : String,
    required : true,
},
task_solution : String //Oplossing van de task, API gaat hierop checken
});

Как я могу сделать так, чтобы при вызове PUT/POST назначать задачу его пулу.Эта определенная задача будет клонирована в коллекции «Taskuser» с UserId от пользователя, который на нее нажал?Мне просто нужно знать, как я могу клонировать документ из одной коллекции и поместить его в другую коллекцию.

1 Ответ

0 голосов
/ 07 января 2019

Если вы хотите ссылаться только на userId для задачи, вы можете легко переместить свойство userId в TaskSchema:

...,
userId: {
         type: mongoose.Schema.Types.ObjectId,
         ref: User (if your user schema is called User)
         }

Таким образом, когда вы делаете PUT или POST, вы можете создатьЗадача (POST), а затем вы можете обновить, когда задача назначена пользователю (PUT, с запросом, подобным {$ set: {userId: USER_ID}}).

Если задача может быть назначена нескольким пользователям, ваше свойство может стать массивом, но если этот массив может сильно вырасти, возникнет небольшая проблема, когда вам придется загрузить его (GET) и затем разбить на страницы (с инфраструктурой агрегирования), чтобы пользователи не перегружали запрос.Чтобы избежать этого, вы можете создавать разные коллекции:

  • Коллекция задач,
  • Коллекция пользователей,
  • Коллекция UserTask: (со свойством userId и свойством списка задач) каждаяПри создании пользователя также создается пользовательская задача, и когда пользователю назначается задача, идентификатор задачи будет добавлен в свойство Task_Id.Таким образом, вы можете легко запросить задачу по userId или пользователям по taskId.
...