Я новичок в разработке Mongoose и Nodejs в целом, и у меня есть немного путаницы в том, как правильно настроить сохранение моих записей. Вот мои две схемы:Сохранение Mongoose для населения
Скачать
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var downloadSchema = Schema({
title : String,
description : String,
_project : { type: Schema.Types.ObjectId, ref: 'Project' }
});
module.exports = mongoose.model('Download', downloadSchema);
Проект
...
var projectSchema = Schema({
name : String,
url : String,
pwd : String,
_downloads : [{type: Schema.Types.ObjectId, ref: 'Download' }]
});
module.exports = mongoose.model('Project', projectSchema);
Это, кажется, работает правильно. В документации объясняется мой случай использования загрузки и компоновки проекта, но я не уверен, как правильно заполнить Project._downloads
. Вот что я сделал:
Экспресс маршрута Обработчика:
function createDownload(req, res) {
// the Project Id is passed in the req.body as ._project
var dldata = req.body;
Project.findOne({ _id : dldata._project }, function(err, project) {
var dload = new Download(dldata);
dload.save(function (err, download) {
project._downloads.push(download._id);
project.save(function(err){
var msg = {};
if(err) {
msg.status = 'error';
msg.text = err;
}else {
msg.status = 'success';
msg.text = 'Download created successfully!';
}
res.json(msg);
});
});
});
}
Это кажется усложненным мне. Должен ли я быть вручную push
, относящимся к массиву ._downloads
, или что-то, что Mongoose должно обрабатывать внутренне на основе схемы? Есть ли лучший способ добиться этого, так что я могу сделать:
Download.find().populate('_project').exec(...
, а также:
Project.findOne({_id : _projectId}).populate('_downloads').exec(...
Спасибо! Как только я изменил схему проекта для '._downloads', чтобы:' _downloads: [Download.schema] 'работал как шарм. Я не знал достаточно, чтобы даже посмотреть на субдоки, поэтому спасибо за то, что указал мне в правильном направлении. –
Рад, что я смог помочь! –