我是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);
答案 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]
}))