将Mongo / Mongoose对象保存在另一个模型中

时间:2019-01-30 10:57:37

标签: node.js mongodb express mongoose schema

我有一个如下所示的Mongo对象:

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 :(得分:2)

u可以通过以下方式替换foodName1:字符串,foodImage1:字符串:

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,但视觉效果较差