将 Mongo/Mongoose 对象保存在另一个模型中
Posted
技术标签:
【中文标题】将 Mongo/Mongoose 对象保存在另一个模型中【英文标题】:Save Mongo/Mongoose Object within another Model 【发布时间】: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,
);
对我来说,这似乎是我在两个不同的模型中保存了两次数据。这是处理这个问题的正确方法吗?或者有没有更好的方法将食物数据存储在用户模型中?
【问题讨论】:
【参考方案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,但它的视觉效果较差
【讨论】:
谢谢!这太棒了。你有没有机会举例说明如何使用该设置保存数据? 感谢大家的帮助!! 乐于助人,新事物总是很难开始以上是关于将 Mongo/Mongoose 对象保存在另一个模型中的主要内容,如果未能解决你的问题,请参考以下文章
(Mongo/Mongoose) 如何处理等待多个查询的结果
NodeJS Mongo - Mongoose - 动态集合名称