Найти документ по идентификатору и отправить другой поддокумент - PullRequest
0 голосов
/ 16 мая 2018

У меня есть две схемы коллекции, и я хочу вставить один экземпляр модели одной схемы (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 в свою коллекцию FP внутри массива "Fahrplanabschnitte".Либо по ссылке, либо по схеме / вложенному вложенному документу ... Каков наилучший способ сделать это и как я могу это сделать?

Я вызываю метод POST, который должен выполнять работу с: router.route('/FA/FPPUT/:FP_id').put(FAController.create_and_push_to_FP_by_ID)

Сама функция выглядит следующим образом: на первом этапе экземпляр FA создается и сохраняется в коллекции FA, затем коллекция 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 голосов
/ 16 мая 2018

Вы ошибаетесь здесь

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