Node.js 使用嵌套对象填充嵌套Mongoose对象
我正在做我的第一个项目,这几天来我一直在为这个项目苦苦挣扎 我试图填充一个对象,该对象包含啤酒厂信息和啤酒模型中对应的单个啤酒 models.jsNode.js 使用嵌套对象填充嵌套Mongoose对象,node.js,mongodb,mongoose,mongoose-schema,mongoose-populate,Node.js,Mongodb,Mongoose,Mongoose Schema,Mongoose Populate,我正在做我的第一个项目,这几天来我一直在为这个项目苦苦挣扎 我试图填充一个对象,该对象包含啤酒厂信息和啤酒模型中对应的单个啤酒 models.js var mongoose = require('mongoose'), Schema = mongoose.Schema; var beerSchema = Schema({ breweryName: String, beer: [{ beerName: String }] }); var draf
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);
});
};`
我得到一个空值,返回当前代码。理想情况下,我希望返回的对象看起来像--
带空返回的Draftlist对象
{ _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 } ] }
使用
用法:
const getDraftlist = (userName, callback) => {
models
.Draftlist
.findOne({
userName
})
.deepPopulate('tap._tapBeer')
.exec((err, draftlist) => {
console.log(draftlist);
callback(draftlist);
});
};
或:
使用
用法:
const getDraftlist = (userName, callback) => {
models
.Draftlist
.findOne({
userName
})
.deepPopulate('tap._tapBeer')
.exec((err, draftlist) => {
console.log(draftlist);
callback(draftlist);
});
};
或:
你试过了吗
populate({path:'tap.\u tapBeer',model:'Beer'})
或只是.populate('tap.\u tapBeer')
@Veeram仔细阅读,他已经在使用它了(:@num8er他引用了错误的模型。我的错误,好像是在我的位置上深夜了(:尝试添加mongoose.set('debug',true)
在文件顶部,检查控制台上的查询,你能从两个集合中添加一个示例文档吗?你试过了吗?填充({path:'tap.'tapBeer',model:'Beer})
或只是填充('tap.'tapBeer')
@Veeram仔细阅读,他已经在使用它了(:@num8er他引用了错误的模型。我的错误,似乎是深夜在我的位置(:尝试添加mongoose.set('debug',true));
在文件顶部,检查控制台上的查询,您可以添加两个集合中的示例文档吗?谢谢,但这仍然返回空值。我想这是因为我引用了嵌套在BeerSchema中的beer对象的ID。有什么想法吗?您确定集合中有引用nces正确吗?@BHalvy82在我的回答中也尝试了另一个示例尝试了另一个示例,但仍然不走运。我肯定ObjectId匹配。谢谢,但这仍然返回空值。我想这是因为我引用了嵌套在BeerSchema中的beer对象的ID。有什么想法吗?你确定你的收藏中有文档吗“那引用的是正确的吗?@BHalvy82在我的回答中也尝试了另一个例子尝试了另一个例子,但仍然不走运。我确信ObjectId匹配。
const getDraftlist = (userName, callback) => {
models
.Draftlist
.findOne({
userName
})
.deepPopulate('tap._tapBeer')
.exec((err, draftlist) => {
console.log(draftlist);
callback(draftlist);
});
};
const Draftlist = models.Draftlist;
const getDraftlist = (userName, callback) => {
Draftlist
.findOne({
userName
})
.exec((err, draftlist) => {
Draftlist
.deepPopulate(
draftlist, 'tap._tapBeer',
(err, draflist) => {
console.log(draftlist);
callback(draftlist);
});
});
};