按ID查找文档并推送另一个子文档

时间:2018-05-16 12:30:27

标签: express mongoose subdocument

我有两个Collection模式,我想在另一个模式模式(FP)的数组字段中插入一个模式(FA)的一个Model实例:

var FASchema = new Schema({
    Timestamp: Date,
    PrognostizierterBetriebswert: Number,
    posFlexPot: Number,
    negFlexPot: Number,
    Leistungsuntergrenze: Number,
    Leistungsobergrenze: Number,
    posGesEnergie: Number,
    negGesEnergie: Number,
    Preissignal: Number,
    Dummy1: Schema.Types.Mixed,
    Dummy2: Schema.Types.Mixed,
    Dummy3: Schema.Types.Mixed
    //same: Dummy: {}

});
module.exports = mongoose.model("FA", FASchema, 'FA');

var FPSchema =  new Schema( {
    _id: String, //mongoose.Schema.Types.ObjectId,
    Demonstrator: Number,
    erstellt: {type: Date, 'default': Date.now},
    von: Date,
    bis: Date,
    Fahrplanabschnitte: { type: Schema.Types.ObjectId, ref: 'FA' },
})    
module.exports = mongoose.model("FP", FPSchema, 'FP');

现在,每当我创建一个新的FA文档时,我都想将FA文档推入阵列中的FP集合中,并且#34; Fahrplanabschnitte"。无论是通过引用,还是通过模式/嵌套子文档......最好的方法是什么,我该怎么做?

我调用应该执行以下操作的POST方法:router.route('/FA/FPPUT/:FP_id').put(FAController.create_and_push_to_FP_by_ID)

该功能本身如下所示: 在第一步中,创建FA实例并将其保存在FA Collection中,然后更新FP集合并进入数组" Fahrplanabschnitte",应插入新的FA实例。但是,它没有按计划运行。

exports.create_and_push_to_FP_by_ID=function(req,res) {
    console.log(req.body)
    var fa = new FA(req.body);      

    //SAVE the new instance
    fa.save(function(err) {
        if (err) {
            console.log(err);
            res.status(400);
            res.send(err);
    }
    else {
        console.log("Instanz FA in Datenbank erzeugt!");
        res.status(200);
        res.json({ message: 'FA-Instance created in datbase!' })

    }
    });

    FP.findOneAndUpdate({_id: req.params.FP_id}, function(err, fp) {
        if (err){
            res.send(fa);
        }
        //res.json(fp);
        fp.Fahrplanabschnitte.push(fa._id);
    })      
};

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你这里出错了

`fp.Fahrplanabschnitte.push(fa._id); //does't make sense at all` 

以上行不会对mongodb数据库执行任何操作或更新任何内容...

  

您需要使用$push运算符来更新中的集合   数据库

exports.create_and_push_to_FP_by_ID=function(req,res) {
    console.log(req.body)
    var fa = new FA(req.body);      

    //SAVE the new instance
    fa.save(function(err, fa) {
        if (err) {
            console.log(err);
            res.status(400);
            res.send(err);
    }
    else {
        console.log("Instanz FA in Datenbank erzeugt!");
    FP.findOneAndUpdate({_id: req.params.FP_id}, { $push: { 
      Fahrplanabschnitte: fa._id } } function(err, fp) {
        if (err){
            return res.send(fa);
        }
        res.status(200);
        res.json({ message: 'FA-Instance created in datbase!' })
    })  
    }
    });    
};