1
我已經在貓鼬的幫助下創建了一個數據庫,現在我試圖用它的引用填充文檔。填充單文檔引用可以正常工作,而填充數組則不行。貓鼬陣列人口
給我找麻煩的模型如下:
任務
var taskSchema = new Schema({
_client: { type: Schema.Types.ObjectId, ref: 'Client', required: true },
link: { type: String, required: true },
reqDate: { type: Date, default: Date.now },
startDate: { type: Date },
extId: { type: String, required: true },
results: [{ type: Schema.Types.ObjectId, ref: 'Result' }]
});
var Task = mongoose.model('Task', taskSchema);
結果
var resultSchema = new Schema({
_task: { type: Schema.Types.ObjectId, ref: 'Task', required: true },
_module: { type: Schema.Types.ObjectId, ref: 'Module', required: true },
finishDate: { type: Date, required: true },
result: { type: Object, required: true }
});
var Result = mongoose.model('Result', resultSchema);
我加入結果數據庫用下面的代碼:
let taskPromise = Task.findById(req.params.taskId).exec();
let modulePromise = Module.findOne({ name: req.body.module }).exec();
// Wait for promises to finish
Promise.all([taskPromise, modulePromise])
.then(values => {
if (values[1]) {
// Create new result and add to database
let result = new Result({
_task: values[0],
_module: values[1],
finishDate: Date.now(),
result: req.body.result
});
result.save();
res.json({ result: 'success' });
} else {
// If findOne does not find a result, it resolves the promise instead of rejecting it
// Therefore Promise.all is successful and we have to check for errors like this
res.json({ error: 'The module is invalid' });
}
// findById on the other hand rejects a promise when it does not find a result
// That's why we are catching the error here.
}).catch(err => res.json({ error: 'The task is invalid' }));
結果添加了API調用,請求正在事先驗證。
要填充,我使用下面的代碼:
Task.findById('587f48ba009932409cf51626')
.populate('results _client').exec(function(err, task) {
res.json(task);
});
不介意有沒有錯誤處理,這只是用於調試的原因,作爲ID被硬編碼藏漢
的_client
的人口可以正常工作,而results
仍然是一個空數組,即使數據庫中充滿了此任務的結果。
我一直在關注documentation,並沒有看到我的代碼有任何區別,所以我不知道我可能會做錯什麼。在這個
思想是極大的讚賞
E/
我使用
Result.find({_task: task}, function(err, result) {
console.dir(result);
})
獲得此任務的結果工作完全正常,並授予我需要的所有文件進行測試。我想這需要一個與我仍然無法找到任何錯誤的參考有關的問題。
由於貓鼬3.6你不必多次調用填充,這段代碼基本上和我的一樣。 – Marv