我知道这已经被问了一百万遍了,但这似乎对我没有用。从数据库获取对象时,找不到在对象中填充引用的方法。无论我尝试什么,它要么返回一个空列表,要么仅返回id的列表。我在这里做什么错了?
displayInventory: (req, res)=>{
Merchant.find({otherId: merchantId})
.populate({
path: "ingredients",
populate: {
path: "ingredient",
model: "Ingredient"
}
})
.then((merchant)=>{
console.log(merchant);
if(merchant){
return res.render("./inventory/inventory", {merchant: merchant});
}else{
return res.redirect("/merchant/new");
}
})
.catch((err)=>{
console.log(err);
return res.render("error");
});
}
const MerchantSchema = new mongoose.Schema({
name: {
type: String,
required: true
},
otherId: {
type: String,
required: true
},
lastUpdatedTime: {
type: Date,
default: Date.now
},
ingredients: [{
ingredient: {
type: mongoose.Schema.Types.ObjectId,
ref: "Ingredient"
},
quantity: {
type: Number,
min: [0, "Quantity cannot be less than 0"]
}
}],
recipes: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Recipe"
}]
});
答案 0 :(得分:1)
请参阅您的架构,看起来您只需要这样做:
Merchant.find({cloverId: merchantId}).populate("ingredients.ingredient")...
答案 1 :(得分:0)
您可以尝试以下代码。
Merchant.find({otherId: merchantId})
.populate({ path: 'ingredients' })
.exec(function(err, docs) {
var options = {
path: 'ingredients.components',
model: 'Ingredient'
};
if (err) return res.json(500);
Merchant.populate(docs, options, function (err, merchant) {
res.json(merchant);
});
});
答案 2 :(得分:0)
如果其他人有类似的问题,我将回答我自己的问题。我的问题是我重命名了一些变量,但是在将数据保存到数据库时忘记这样做。愚蠢的错误,但只是提醒您在重构时要小心。我用了Coung Le Ngoc的回答,效果很好。