需要帮助填充猫鼬中的嵌套数组
问题描述:
我正在努力使用猫鼬填充嵌套数组。需要帮助填充猫鼬中的嵌套数组
我有一个配方模型看起来是这样的:
let recipeSchema = Schema({
name: {
type: String,
required: true
},
description: {
type: String,
},
steps: {
type: String,
required: true,
},
ingredients: [],
reviewsArray: [{ type: Schema.Types.ObjectId, ref: 'Review' }],
category: {
type: String,
required: true,
},
postedBy: [{type: Schema.Types.ObjectId, ref: 'User'}],
numberOfRatings: {
type: Number,
default: 0
},
totalAddedRatings: {
type: Number,
default: 0
},
reviewAverage: {
type: Number,
default: undefined
},
});
而且我也有一个用户模式:
let User = Schema({
name: {
type: String
},
// The passport plugin already inputs username and password into our Schema
username: {
type: String,
unique: true,
required: true
},
password: {
type: String,
required: true,
minlength: 6
},
userId: {
type: String,
default: "Empty"
},
tokens: [{
access: {
type: String,
required: true
},
token: {
type: String,
required: true
}
}],
profilePic: {
type: String
},
email: {
type: String,
unique: true,
required: true,
validate: {
validator: (value) => {
return validator.isEmail(value);
},
message: `{value} is not a valid email address.`
}
},
admin: {
type: Boolean,
defualt: false
},
usersRecipes: [{ type: Schema.Types.ObjectId, ref: 'Recipe' }],
usersReviews: [{ type: Schema.Types.ObjectId, ref: 'Review' }],
usersFavouriteRecipes: {
type: Array
},
usersLikedRecipes: {
type: Array
},
chefKarma: {
type: Number,
defualt: 0
}
});
每当用户进行一个新的配方,我想那配方也存储在usersRecipe数组中。代码,我尝试做的是这样的:
router.post('/addrecipe', (req, res, next) => {
Recipe.create({
name: req.body.name,
description: req.body.description,
steps: req.body.steps,
ingredients: req.body.ingredients,
category: req.body.category,
postedBy: req.body.postedBy
});
User.find({_id: req.body.postedBy})
.populate({
path: 'usersRecipes',
model: 'Recipe'
})
.exec(function(err, docs) {});
});
我的代码不工作,因为我打算虽然。任何人都可以向我解释我做错了什么?
答
这是你在做什么? 保存像
{
name: "hot chips",
description: "some goods",
steps: "2",
ingredients: "",
category: "chips",
postedBy: "12312312312312"
}
食谱然后搜索用户与12312312312312 ID,有些用户喜欢这个
{
name:"farshad",
usersRecipes: []
}
然后说填充的usersRecipes我... 你有没有得到你的错误? 你不写在你的用户文件中的食谱ID。所以userRecipes总是空的...所以每次你都没有得到任何的用户菜单。
你有两个解决方案 1.当过用户创建配方,写usersRecipes该配方ID ... 你可以创建...
recipe.save().then(function(res) {
//update user document userrecipes array
});
OR 2.每个时间你用户,搜索食谱收集与该用户ID
Users.find({id:""}).exec(function(err, user) {
if (err) throw err;
//fill userrecipes
Recipes.find()....
});
我想你是混淆人口与更新。如果要在用户文档中插入配方参考,则需要更新用户文档。 “填充”只能找到并填充真实文档的引用,而不是插入它们。 –
如果我使用更新,我应该摆脱usersRecipes:[{类型:Schema.Types.ObjectId,ref:'食谱'}],? – MountainSlayer