每次尝试推送新元素时,我都无法将项目推送到MongoDB数组中,这会创建一个空对象,并且我无法弄清原因, 我已经用过
Collection.Array.push({element})& Collection.save()
但是我找不到解决办法
这是我的模式
const Schema = mongoose.Schema;
var ParticipantSchema = new Schema({
nom:{Type:String},
prenom:{Type:String},
email:{Type:String}
})
var CompetitionSchema = new Schema({
nom:String,
date:Date,
place:String,
participant :[ParticipantSchema]
})
module.exports = mongoose.model("Competition",CompetitionSchema);
这是我的功能
exports.addParticipant=function(req,res){
var newParticipant={
"nom":req.body.nom,
"prenom":req.body.prenom,
"email":req.body.email
}
Competition.updateOne(
{ _id:req.body.id},
{ $push: { participant: newParticipant } },
(err,done)=>{
return res.json(done)
}
);
}
结果总是像下面这样的空对象
{
"_id": "5ded0eeb85daa100dc5e57bf",
"nom": "Final",
"date": "2019-01-01T23:00:00.000Z",
"place": "Sousse",
"participant": [
{
"_id": "5ded0eeb85daa100dc5e57c0"
},
{
"_id": "5dee3c1b08474e27ac70672e"
}
],
"__v": 0
}
答案 0 :(得分:1)
您正在阵列中使用另一个架构。这导致了所谓的子文档(https://mongoosejs.com/docs/subdocs.html)。猫鼬默认情况下不会填充子文档。因此,您所看到的只是_id
。您可以使用populate方法详细查看所有子文档。 (https://mongoosejs.com/docs/populate.html)。
示例:
Competition.
find({}).
populate('participant').
exec(function (err, comps) {
//
});
您可以在模型或文档上使用populate
。要填充文档,请查看https://mongoosejs.com/docs/api.html#document_Document-populate。还可以通过auto-populate
使用npm
插件,但在大多数情况下并不需要:https://www.npmjs.com/package/mongoose-autopopulate。
答案 1 :(得分:1)
您的代码没有问题,唯一的问题是在架构定义中您有Type
,但必须为type
。
如果您这样更新ParticipantSchema,它将起作用:
var ParticipantSchema = new Schema({
nom: { type: String },
prenom: { type: String },
email: { type: String }
});