【发布时间】:2021-03-31 22:49:49
【问题描述】:
我正在使用 feathersjs 开发第一个项目,并希望将它与 MongoDB 一起使用(并将 mongoose 作为支持的驱动程序)。 但是,我想到了可以进行一些优化的地方(这就是我的想法......)
我在用户实体和项目实体之间有 n:m 关系。所以一个用户可以有很多项目,一个项目可以有很多用户。
我发现我可以如下声明与猫鼬的这种关系:
用户模型:
projects: [
{ type: mongooseClient.Schema.Types.ObjectId, ref: 'Projects' }
]
项目模型
users: [
{ type: mongooseClient.Schema.Types.ObjectId, ref: 'Users' }
]
这可以按我的意愿工作。 现在,我学到了一些关于 MongoDB 的东西,所以它不关心任何对象关系,例如删除一个项目。所以当一个项目被删除时,用户实体会在它的“projects-attribute”中保留被删除项目的ID。
我为此手动实现了如下逻辑:
async remove(id: string, params?: Params) {
const project = (await app.service("projects").get(id)) as ProjectData
const users = project.users;
// User-Table of projects must be set
for(let user of users!) {
const newUserProjects = (await app.service("users").get(user)).projects!.filter(p => p.toString() !== id.toString());
app.service("users").patch(user!, {
projects: newUserProjects ? newUserProjects : []
});
}
return super.remove(id, params);
}
现在应该很明显了,我对这个堆栈很陌生——尤其是 MongoDB。有没有更好的方法来处理这种情况?像这样,我会有很多数据库访问——这并不是一件好事。当然,这种情况还有很多(打补丁、创建等)。
提前致谢!如果有人可以为这个问题提供一个好主意或一些 MongoDB / mongoose 魔法,我会很高兴!
佛斯曼
【问题讨论】:
标签: node.js mongodb mongoose relationship feathersjs