首页 > 解决方案 > 无法推送 mongo 数组中的项目

问题描述

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

标签: node.jsmongodbmongoose

解决方案


您正在使用数组中的另一个架构。这会产生所谓的子文档 ( https://mongoosejs.com/docs/subdocs.html )。Mongoose 默认不填充子文档。所以你看到的只是_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 。


推荐阅读