【发布时间】:2017-10-03 07:46:01
【问题描述】:
从事我的第一个项目,并为此困扰了几天。
我正在尝试填充一个对象,该对象包含啤酒厂信息和来自 Beer 模型的单个对应啤酒。
models.js
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var beerSchema = Schema({
breweryName: String,
beer: [{
beerName: String
}]
});
var draftlistSchema = Schema ({
userName: String,
tap: [{
tapNo: Number,
_tapBeer: { type: Schema.Types.ObjectId, ref: 'Beer' },
tapStatus: String
}]
});
var Draftlist = mongoose.model('Draftlist', draftlistSchema);
var Beer = mongoose.model('Beer', beerSchema);
module.exports = {
Draftlist: Draftlist,
Beer: Beer
}
route.js
var getDraftlist = function(user, callback) {
models.Draftlist.findOne({ 'userName': user }).populate( {
path: 'tap._tapBeer',
model: 'Draftlist'
}).exec(function(err, draftlist) {
// console.log(draftlist.tap)
console.log(draftlist);
callback(draftlist);
});
};`
当前代码返回了一个空值。理想情况下,我希望返回的对象看起来像--
{
breweryName: Some Brewery,
beer: {// Beer object that was referenced by Id //}
}
具有空返回的草稿列表对象
{ _id: 590bd0615a190204fca6d467,
userName: 'A New User1',
__v: 1,
tap:
[ { tapNo: 1,
_tapBeer: null,
tapStatus: 'onTap',
_id: 590bd0615a190204fca6d46d },
{ tapNo: 2,
_tapBeer: null,
tapStatus: 'onTap',
_id: 590bd0615a190204fca6d46c },
{ tapNo: 3,
_tapBeer: null,
tapStatus: 'onTap',
_id: 590bd0615a190204fca6d46b },
{ tapNo: null,
_tapBeer: null,
tapStatus: 'Cellar',
_id: 590bd0615a190204fca6d46a },
{ tapNo: null,
_tapBeer: null,
tapStatus: 'Cellar',
_id: 590bd0615a190204fca6d469 },
{ tapNo: null,
_tapBeer: null,
tapStatus: 'Cellar',
_id: 590bd0615a190204fca6d468 },
{ _tapBeer: null,
tapStatus: 'Cellar',
_id: 590bd0735a190204fca6d470 } ] }
啤酒对象
{ breweryName: 'Beachwood',
_id: 590bd3f1ed13510514405cba,
beer: [ { beerName: 'IPA', _id: 590bd3f1ed13510514405cbb } ] }
【问题讨论】:
-
你试过了吗?
populate( { path: 'tap._tapBeer', model: 'Beer' } )或只是.populate('tap._tapBeer') -
@Veeram 仔细阅读,他已经在使用它了(:
-
@num8er 他引用了错误的模型。
-
我的错,我这里好像是深夜了(:
-
尝试在文件顶部添加
mongoose.set('debug', true);并检查控制台上的查询,您可以从两个集合中添加示例文档吗?
标签: node.js mongodb mongoose mongoose-schema mongoose-populate