Я использую 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 });
})
}
})
}
Любая помощь будет оценена.Спасибо!