猫鼬/ MongoDB问题
我有一个包含基本配置文件数据的所有者模型。
我有一个辅助模型:OwnersImages
例如
{
owner: {
type: Schema.Types.ObjectId,
ref: 'Owners'
},
name: String,
imageUrl: String,
},
);
从客户端,我想将imageUrl和名称发布到OwnersImages表。例如
let values = {
owner: this.state.user._id,
name: this.state.field,
imageUrl: this.state.url
}
axios.post(`${serverPath}/api/addFieldImage`, values)
但是我不确定如何最好地做到这一点,将其链接等。
我可以对Owners
表执行GET请求以获取Owner
数据,但是将其作为值的一部分发布到OwnerImages
不会成功链接两个表。
我是否只需要在OwnerImages
中存储对所有者ID的字符串引用,或者有更聪明的方法?
或者我应该只是将用户ID的字符串发布到猫鼬中,然后从那里映射到Owner表?
试图尽我所能解释最好的方法,但是眼睛很累,所以请问是否有任何混淆!非常感谢
没有看到您的确切设置,我认为您可以根据需要修改此设置:
// In the Schema/Model files
const ownersSchema = Schema({
// other fields above...
images: [{ type: Schema.Types.ObjectId, ref: 'OwnersImages' }]
});
const ownersImagesSchema = Schema({
// other fields above...
owner: { type: Schema.Types.ObjectId, ref: 'Owners' },
});
// in the route-handler
Owners.findById(req.body.owner, async (err, owner) => {
const ownersImage = new OwnersImages(req.body);
owner.images.push(ownersImage._id);
await ownersImage.save();
await owner.save();
});
作为旁注,我认为模型通常具有单数名称,因此Owner和OwnerImage。然后,该集合将自动采用复数形式。值得深思。
[要加载它们时,可以将它们与populate()
链接。考虑在某个路由处理程序中加载与OwnersImages
关联的所有Owners
,其中/:id
参数是Owners
id:
Owners
.findOne({ _id: req.params.id })
.populate('images')
.exec(function (err, images) {
if (err) return handleError(err);
// do something with the images...
});