【问题标题】:Save Mongo/Mongoose Object within another Model将 Mongo/Mongoose 对象保存在另一个模型中
【发布时间】:2019-06-23 15:16:37
【问题描述】:

我有一个看起来像这样的 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, 
});

对我来说,这似乎是我在两个不同的模型中保存了两次数据。这是处理这个问题的正确方法吗?或者有没有更好的方法将食物数据存储在用户模型中?

【问题讨论】:

    标签: node.js mongodb express mongoose schema


    【解决方案1】:

    你可以替换 foodName1: String, foodImage1: String by :

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

    【讨论】:

    • 谢谢!这太棒了。你有没有机会举例说明如何使用该设置保存数据?
    • 感谢大家的帮助!!
    • 乐于助人,新事物总是很难开始
    猜你喜欢
    • 2022-10-14
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2016-02-24
    • 2020-01-31
    相关资源
    最近更新 更多