#mongodb #mongoose #postman
#mongodb #mongoose #postman
Вопрос:
После завершения курса по MEAN Stack я работаю над созданием собственного веб-приложения — страницы рецептов. Я разработал свои модели, но когда я пытаюсь заполнить базу данных новым рецептом, он просто не будет работать. Основная проблема заключается в том, как я хочу хранить ингредиенты, они будут храниться в одной из таблиц, тогда каждый рецепт будет иметь свой список ингредиентов и количество для каждого. Например, чтобы приготовить тосты, которые вам нужны, скажите «50 гр. масла и 4 ломтика хлеба». Это схема, которую я использую:
var RecipeSchema = Schema({
name: String,
desc: String,
author: { type: Schema.ObjectId, ref: 'User' },
category: { type: Schema.ObjectId, ref: 'Category' },
ingredients: [{ amount: String, ingredient: { type: Schema.ObjectId, ref: 'Ingredient' }}],
steps: [String],
image: String,
thumbnail: String,
portions: Number,
difficulty: Number,
cookingTime: Number,
comment: String
});
Когда я захожу в Postman и пытаюсь заполнить запись «Рецепт тостов», у меня получается следующее:
name:Toast
desc:Toast is a common breakfast staple.
author:5cad791a7b2e651f7803f5de
category:5cb1ff8f484a172984178a97
ingredients:[{"amount": "4 slices", "ingredient": "5cb1ffdb484a172984178a98"}, {"amount": "35 grs.", "ingredient": "5cb2000d484a172984178a99"}]
steps:['Toast the bread in the oven.','Spread some butter on each toast.']
image:'null'
thumbnail:'null'
portions:1
difficulty:1
cookingTime:15
comment:'null'
Но я продолжаю получать ошибку «cast Array». В чем может быть проблема? Это проблема с моей моделью, с Postman или с тем, как я отправляю массив?
Редактировать:
По-видимому, это была проблема с тем, как я разместил свои массивы в Postman. После еще нескольких тестов мне удалось загрузить полный рецепт в формате JSON. Структура правильная (но то, что предлагает Хуан, тоже можно использовать, чтобы сделать код более чистым).
Ответ №1:
Я не совсем уверен, но когда я работал с mongoose, внутри внутренних объектов был новый объект схемы, в данном случае это было бы на ингредиентах
const IngredientSchema = new Schema({
amount: String,
ingredient: { type: Schema.ObjectId, ref:'Ingredient' }
});
const RecipeSchema = new Schema({
name: String,
desc: String,
author: { type: Schema.ObjectId, ref: 'User' },
category: { type: Schema.ObjectId, ref: 'Category' },
ingredients: [ IngredientSchema ],
steps: [String],
image: String,
thumbnail: String,
portions: Number,
difficulty: Number,
cookingTime: Number,
comment: String
});