node.js - Mongoose:根据 id 填充数组
问题描述
我有一个小型 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:
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,所以我找到了一种连接这两个集合的方法:mongoose 中的填充方法。然而,这并没有按预期工作,我得到了不确定:
exports.get_favorites = (req, res) => {
User.findById({
_id: req.params.userId,
})
.populate('favorites')
.exec((err, recipe) => {
console.log(recipe);
res.send(recipe);
});
};
我应该如何使用实际对象填充收藏夹数组,这些对象包含我在应用程序的前端部分渲染所需的数据?
解决方案
这听起来很傻,但我认为问题在于你用小写的 r, 导出你的配方模型recipe
,但用大写的 R, 引用它Recipe
。如果你让这些保持一致,我认为它会起作用..
注意:我认为您在模型中引用user
模型时需要做同样的事情recipe
推荐阅读
- bi-publisher - EText 模板:未在每个级别重置的行数
- angular - 我们应该在 Angular 应用程序中标准化状态吗?
- abap - Sap Abap 层次结构报告编辑列
- sql - 在Oracle序列中生成相同的正数和负数
- vb.net - 使用计数的 VB.NET 登录尝试
- r - Using as.formula with a comma
- matlab - How to make neural network training charts have a logarithmic vertical axis?
- r - Rterm.exe 一段时间后崩溃
- concurrency - 防止并发操作中的多次借用
- python - find the "elbow point" on an optimization curve with Python