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

Find document by ID and push another subdocument

我有两个集合模式,我想将一个模式 (FA) 的一个模型实例插入另一个模型模式 (FP) 的数组字段中:

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 文档推送到数组 "Fahrplanabschnitte" 内的我的 FP 集合中。通过参考,或通过 schema/nested 子文档...最好的方法是什么,我该怎么做?

我调用 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);
    })      
};

我做错了什么?

你这里错了

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

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

you need to use $push operator to update the collection in the database

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!' })
    })  
    }
    });    
};