我有一个小的CRUD应用程序,该应用程序通过了用户身份验证,可以创建/添加一些收藏夹。我一直在添加收藏夹上停留一段时间。
这是我的用户架构:
const UserSchema = Schema({
googleId: String,
name: String,
favorites: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Recipe' }],
});
这是我的食谱模式:
const RecipeSchema = new Schema({
title: {
type: String,
required: [true, 'Title of the recipe is required'],
},
category: {
type: Array,
required: [true, 'Category is required'],
},
description: {
type: String,
required: [true, 'Description is required'],
},
imgUrl: {
type: String,
required: [true, 'Image is required'],
},
ingredients: {
type: Array,
required: [true, 'Ingredients are required'],
},
timeOfPreparation: {
type: String,
required: true,
},
preparation: {
type: String,
required: true,
},
sourceName: {
type: String,
required: true,
},
sourceUrl: {
type: String,
required: true,
},
fans: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
});
这两种方式都从各自的文件中导出:
const Recipe = mongoose.model('recipe', RecipeSchema);
const User = mongoose.model('user', UserSchema);
module.exports = Recipe;
module.exports = User;
用户已通过护照认证,此部分工作正常。然后,当用户单击前端上的“收藏夹”按钮(或我以邮递员发送请求)到端点(PUT)'/:userId / favorites'时,控制器将转到收藏夹数组并推送新的ID:< / p>
exports.add_to_favorite = (req, res) => {
const { recipeId } = req.body;
User.findByIdAndUpdate(
{
_id: req.params.userId,
},
{ $addToSet: { favorites: recipeId } }
).then(() => {
User.findById({
_id: req.params.userId,
}).then(() => res.send(res.status));
});
};
但是,由于我想在前端显示收藏夹,而不仅仅是它们的ID,所以我找到了一种方法来连接这两个集合:猫鼬中的填充方法。但是,这没有按预期工作,我无法定义:
exports.get_favorites = (req, res) => {
User.findById({
_id: req.params.userId,
})
.populate('favorites')
.exec((err, recipe) => {
console.log(recipe);
res.send(recipe);
});
};
如何在我的收藏夹数组中填充实际对象,这些对象包含我需要在应用程序前端呈现的数据?
答案 0 :(得分:1)
这听起来似乎很愚蠢,但是我认为问题在于,您以小写字母r recipe
导出配方模型,而以大写字母R Recipe
引用配方模型。如果您使这些保持一致,我认为它会起作用。
注意:我认为您引用user
模型中的recipe
模型需要做同样的事情