Сохранить объект Mongo / Mongoose в другой модели - PullRequest
0 голосов
/ 30 января 2019

У меня есть объект Монго, который выглядит следующим образом:

var foodSchema = new mongoose.Schema({
   name:      { type: String, required: false, unique: true },
   image:     { type: String, required: false, unique: true },
});

Идея состоит в том, чтобы иметь возможность сохранять объект "еда" для пользователя.(Данные поступают из начального файла.)

Итак, если данные, входящие в приведенную выше модель, были:

name: tacos, 
image: tacos.gif 

Кем я хочу бытьВ состоянии затем сохранить эти данные в пользовательской модели. Есть ли лучший способ сделать это, чтобы в пользовательской модели было поле для сохранения данных?(Сохранение в двух последних полях) Например:

var UserSchema = new mongoose.Schema({
    username: String,
    password: String,
    foodName1: String,
    foodImage1: String, 
});

Мне кажется, что я сохраняю данные дважды, в двух разностных моделях.Это правильный способ справиться с этим?Или есть ли лучший способ хранить данные о еде внутри модели пользователя ?

1 Ответ

0 голосов
/ 30 января 2019

вы можете заменить foodName1: String, foodImage1: String на:

food: {id: { type: Schema.Types.ObjectId, ref: 'foodSchema'}

и после того, как вы получите foodSchema, используйте заполнение https://mongoosejs.com/docs/populate.html

, если вам нужно более одной foodSchema

food: [{id: { type: Schema.Types.ObjectId, ref: 'foodSchema'}]

для сохранения только что создайте объект пищи и поместите на существующего пользователя или нового созданного пользователя:

let user = new UserSchema({'user info here'})
let food = new foodSchema({name: 'test',image: 'test'});
user.food = food
user.save().then(() => {

})

или для добавления пищи в массив продуктов на существующего пользователя:

UserSchema.findById(req.body.id).exec((err, docc) => {
                docc.food.push(food)
                docc.save((err, result) => {
                    if (err)
                        res.sendStatus(500);
                    res.sendStatus(200);
                })
            })

в противном случае мы можем просто добавить _id объекта питания, но это менее наглядно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...