无法在mongo数组中推送项目

时间:2019-12-09 12:26:22

标签: node.js mongodb mongoose

每次尝试推送新元素时,我都无法将项目推送到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
}

2 个答案:

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