Массив объектов Mongoose не будет работать с Postman

#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
});