0
我是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'的Project模式修改爲:'_downloads:[Download.schema]'它就像一個魅力一樣工作。我甚至不知道要看subdocs,所以謝謝你指出我正確的方向。 –
很高興我能夠幫助! –