Array.prototype.slice.call返回空数组

时间:2019-06-24 15:11:34

标签: javascript node.js mongodb express

我是Javascript的初学者。我需要将JSON请求数据存储到mongo db数据库中的子文档中。我想到的方法是将JSON请求转换为数组,然后使用$ push方法将数组传递给子文档。当我使用Postman Array.prototype.slice.call发送路由请求时,返回[]'空数组'。

请让我知道可能的原因。请帮忙!

先谢谢了。

// @route    PUT api/prescription/:patientId
// @desc     Add prescription
// @access   Private

router.post('/:patientId',auth,adminDocguard, async(req,res)=>{
    console.log(req.body.prescription);

    var newPrescription = Array.prototype.slice.call(req.body.prescription);

    console.log(newPrescription)
    try {
        const patient_profile = await Patient.findOneAndUpdate(

            {patientId:req.params.patientId},
            {"$push":{"prescription":newPrescription}},
            {"upsert":true,"new":true}

          );
          await patient_profile.save();
          res.json(patient_profile);

    } catch (err) {
        console.error(err.message);
        res.status(500).send('Server Error');
    }
});

使用邮递员的JSON请求:

 {
    "prescription":{
    "1":{"mediaction": "Crocin456",
    "dosage": "200"
    },
    "2":{"mediaction": "Crocin123",
    "dosage": "200"
    }
    }

}
const mongoose= require('mongoose');
autoIncrement = require('mongoose-auto-increment');
const config =require('config');
const db=config.get('mongoURI');

var connection = mongoose.createConnection(db);

autoIncrement.initialize(connection);

const PatientSchema = new mongoose.Schema({
    name:{
        type:String,
        required: true
    },
    phonenumber:{
        type:Number,
        required:true
    },
    date: {
        type: Date,
        default: Date.now
    },
    slider_1:{
        type:Number,
        required: true
    },
    slider_2:{
        type:Number,
        required:true
    },
    slider_3:{
        type:Number,
        required:true
    },
    prescription:[
        {
            mediaction:{
                type:String
            },
            dosage:{
                type:Number
            },
            morning:{
                type:Number
            },
            evening:{
                type:Number
            }
        }
    ]

});
PatientSchema.plugin(autoIncrement.plugin, {
  model:'Patient',
   field:'patientId',
   startAt:1,
   incrementBy:1
});

module.exports=Patient=mongoose.model('patient',PatientSchema);

1 个答案:

答案 0 :(得分:2)

如果要将处方对象转换为数组,则应指定新创建的数组中每个对象的形状。 由于对象中的处方具有序列号,因此我可能会将ii转换为以下形式:

[
  {
    "id": 1,
    "mediaction": "Crocin456",
    "dosage": "200"
  },
  {
    "id": 2,
    "mediaction": "Crocin123",
    "dosage": "200"
  }
]

要应用此转换,只需使用以下代码即可完成该操作:

const { prescription } = req.body;
const prescriptionArray = Object.keys(prescription).map(id => ({
  id,
  ...prescription[id]
}))