简体   繁体   中英

how to save data to the array in mongoose

I am building an application where user's can save many images along with its name. I want that information to be stored in mongoose in an array. How to do this?

Here is my mealSchema,

const MealSchema = new mongoose.Schema({
  userId: {
    type: String,
    required: true,
  },
  meals: [
    {
      mealImg: {
        type: String,
      },
      mealName: {
        type: String,
      },
    },
  ],
});

how to save data to this schema.

I want the result to be like this:

    { _id: 5fd662b596ac96247463fab8,
    userId:"someid"
     meals: [
    {
    _id:23242fff,
        mealName:"meal1",
        mealImg:"https://meal1.png"
        },
_id:23242fff,
    mealName:"meal2",
    mealImg:"https://meal3.png"
    },
_id:23242fff,
    mealName:"meal3",
    mealImg:"https://meal4.png"
    },
    ] }

You can write smth like this:

Meal.insert({ userId: someId, meals: arrayOfMeals })

But this is not a good practice, because you can put unnecessary and incorrect information in the array. Such problems are solved by intermediate tables and links between them. I advise you to create another table, the scheme of which will be as follows:

const UsersMealsSchema = new mongoose.Schema({
  userId: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
  mealId: {type: mongoose.Schema.Types.ObjectId, ref: 'Meal'},
});

Then change your Meals shema:

const MealSchema = new mongoose.Schema({
  id: {
    type: string,
    required: true,
  }
  mealImg: {
    type: String,
    required: true,
  },
  mealName: {
    type: String,
    required: true,
  },
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM