2017-04-21 7 views
0

私は以下のデータを持っていますが、私のスキーマは以下のようなデータを送信するために私に何を許可していません。私はあなたがしようとしているので、その作業罰金が、私が望むより、その後1体私のrequirmentに応じてnodejsスキーマを変更する方法

//Request body 
      { 
      "title" : "test10", 
      "sch_start": "2017-04-3", 
      "sch_end":"2017-04-3" 
     }, 
     { 
     "title" : "test11", 
     "sch_start": "2017-04-4", 
     "sch_end":"2017-04-4" 

     } 

 import mongoose, {Schema} from 'mongoose'; 

    /** 
    * Model to store Calendar entries of Engineer 
    */ 
    var EngineerScheduleSchema = new Schema({ 
     title: { type: String, default: ''},        
     available: { type: Boolean, default: false }, 
     sch_start: { type:Date, default: Date.now }, 
     sch_end: { type:Date, default: Date.now } 
    }); 

    export default mongoose.model('engineer_schedule', EngineerScheduleSchema); 

// Main Model Mongoose Schema 
    schedule: [EngineerSchedule.schema] 

//API Method 
export function updateSchedulecalendar(req, res) { 
    var responseSchedule; 

    //Insert 

    return Engineer.findOneAndUpdate({ _id: req.params.id }, { $addToSet: { schedule: req.body } }, { new: true, upsert: true, setDefaultsOnInsert: true, runValidators: true }).exec() 
     .then((entity) => { 
     if (entity) { 
      responseSchedule = entity.schedule; 
      return EngineerEvents.emit(engineerEvents.updatedSchedule, req.user, entity); 
     } 
     else { 
      return res.status(404).end(); 
     } 
     }) 
     .then(()=> { return res.status(200).json(responseSchedule); }) 
     .catch(handleError(res)); 
    } 

答えて

0

まず、一つだけ{}体を入れたときに多くのスケジュールを送信すると、リクエストの本文は次のようになります。

[{ 
      "title" : "test10", 
      "sch_start": "2017-04-3", 
      "sch_end":"2017-04-3" 
     }, 
     { 
     "title" : "test11", 
     "sch_start": "2017-04-4", 
     "sch_end":"2017-04-4" 
    }] 

第二に、あなたがREQで指定された単一スケジュールで更新されるために、2つのスケジュールオブジェクト(TEST10test11)を送信しているように私には思える原因、あなたは、findOneAndUpdateのドキュメントを見てみる必要があります.params.id。あまり意味がありません。

1回のリクエストで複数のスケジュールを更新する場合は、一括更新を実装する必要があります。 bulk functionalityを見て、このようなものを実装します:

export function updateSchedulecalendar(req, res) { 
    var responseSchedule; 

    var bulk = db.items.initializeUnorderedBulkOp(); 
    // Iterate over every schedule sent by client 
    for(schedule in req.body) { 
    // Generate a new update statement for that specific document 
    bulk.find({ title: schedule.title }).update({ $set: { sch_start: schedule.sch_start, ... } }); 
    } 
    // Execute all updates 
    bulk.execute().then(function() { 
    // Validation 
    }); 
} 
関連する問題