reactjs - 使用 ObjectId 发布到 mongoDb 多对一关系
问题描述
Mongoose/MongoDB 问题
我有一个包含基本配置文件数据的 Owners 模型。
我有一个辅助模型: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
无法成功链接两个表。
我是否只需要在其中存储对所有者 ID 的字符串引用,OwnerImages
还是有更智能的方法来执行此操作?
或者我应该将用户 ID 的字符串发布到 mongoose,然后从那里映射到 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()
. 考虑在参数为id的某个路由处理程序中加载所有OwnersImages
与 an 关联的内容:Owners
/:id
Owners
Owners
.findOne({ _id: req.params.id })
.populate('images')
.exec(function (err, images) {
if (err) return handleError(err);
// do something with the images...
});
推荐阅读
- python - 从 Excel 手机中提取数据,如电话、电子邮件、地址、ID 等
- python - 如何在 Django Rest Framework 中使用 SerializerMethodField 进行更新
- java - 如何使用java在谷歌云中上传文件夹?
- javascript - 加载状态永远不会实现??(React - Redux)
- r - 我可以读取 Excel 文件并将字母保留为 R 中的列名吗?
- java - runOnUiThread 里面的方法
- c# - streamReader.ReadToEndAsync() 改变消息内容
- c++ - 我的句子回文代码(C++)有什么问题?
- c++ - 在 .exe 文件中查找“vftable”符号的地址
- ios - tableView:具有不同样式的多个部分