Отправка данных во вложенный массив возвращает ошибку «TypeError: Невозможно прочитать свойство« push »из undefined» - PullRequest
0 голосов
/ 25 ноября 2018

Я использую ExpressJS и Mongoose.Я пытаюсь добавить данные в массив 3-го уровня, но кажется, что они не могут быть сопоставлены.Вот мой пример кода:

Вот схема моей модели, где моя коллекция содержит Объект , где он содержит Элемент массива и под ним содержится SubElement массив

"_id" : "5ab1218975819",
"objectName" : "sample",
"elements" : [
    {
        "_id" : "5abkj2348",
        "elementName" : "some text here",
        "subElements" : [
            {
                "This is where I put my desired data"
            }
         ]
    }
 ]

Модель

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var subElementSchema= new Schema({
    subElementName: {type: String, required: true, trim: true},
    subElements: {type: [subElementSchema], default: []}
}, {
    versionKey: false
});

var elementSchema= new Schema({
    elementName: {type: String, required: true, trim: true},
    subElements: {type: [subElementSchema], default: []}
}, {
    versionKey: false
});

var objectSchema= new Schema({
    project: {type: String, required: true, trim: true, lowercase: true},
    projectName: {type: String, required: true, trim: true},
    objectName: {type: String, required: true},
    elements: {type: [elementSchema], default: []},
    createdAt: {type: Date},
    updatedAt: {type: Date}
}, {
    versionKey: false,
    collection: 'objects'
});

exports.SubElement= mongoose.model('SubElement', subElementSchema);
exports.Element= mongoose.model('Element', elementSchema);
exports.Object= mongoose.model('Object', objectSchema);

Контроллер

Здесь происходит действие, при которомВ request.params содержится идентификатор элемента , в который следует вставить subElement .Я пытался использовать object.elements.subElements.push , но он не работает.он возвращает ошибку TypeError: Невозможно прочитать свойство 'push' из неопределенного

exports.createSubElement= function (req, res) {
        var payload = req.body;
        return Endpoint.Object.findOne({ 'elements._id': req.params.elementId}, { 'elements.$': 1}, function (err, object) {
            if (err)
                return res.status(500).send({ message: 'An error occured\nMessage: ' + err });
            if (!object)
                return res.status(404).send({ message: 'Element not Found' });
            else {
                var subElement= new Endpoint.SubElement(payload);
                object.elements.subElements.push(subElement);
                object.save(function (err) {
                    if (err)
                        return res.status(500).send({ message: 'An error occured\nMessage: ' + err });
                    return res.status(201).send({ subElement });
                })
            }
        })
    }

Любая помощь будет оценена.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...