javascript - 在猫鼬中实现递归子文档数组的好方法是什么?
问题描述
目的是从这里开始:
const team1 = {
members: [
{
role: 'Employee',
name: 'A',
},
{
role: 'Leader',
name: 'B',
subs: [
{
role: 'Employee',
name: 'C'
},
{
role: 'Leader',
name: 'D',
subs: [
{
role: 'Employee',
name: 'E'
}
]
}
]
}
]
};
对此:
{"_id":"5b9692afdbc5ae16048dc5ec","members":[{"_id":"5b9692afdbc5ae16048dc5f1","role":"Employee","name":"A"},{"_id":"5b9692afdbc5ae16048dc5ed","role":"Leader","name":"B","subs":[{"_id":"5b9692afdbc5ae16048dc5f0","role":"Employee","name":"C"},{"_id":"5b9692afdbc5ae16048dc5ee","role":"Leader","name":"D","subs":[{"_id":"5b9692afdbc5ae16048dc5ef","role":"Employee","name":"E"}]}]}],"__v":0}
在一行中:
const data = new Team(team1);
data.save();
我通过执行以下配置实现了它:
const HumanSchema = new Schema({
name: String,
}, { discriminatorKey: 'role'});
const EmployeeSchema = new Schema({}, { discriminatorKey: 'role'});
const LeaderSchema = new Schema({subs: [HumanSchema]}, { discriminatorKey: 'role'});
const TeamSchema = new Schema({
members: [HumanSchema]
}, {discriminatorKey: 'role'});
TeamSchema.path('members').discriminator('Employee', EmployeeSchema);
TeamSchema.path('members').discriminator('Leader', LeaderSchema);
LeaderSchema.path('subs').discriminator('Employee', EmployeeSchema);
LeaderSchema.path('subs').discriminator('Leader', LeaderSchema);
那么,首先,这是最好的方法吗?或者有没有其他简单的方法可以获得相同的结果?
其次,假设我们想从第一个团队的一部分构建另一个团队,例如:
const data = new Team(team1);
const res = data.save();
const team2 = res.members[1].subs;
/* which is [{"_id":"5b9692afdbc5ae16048dc5f0","role":"Employee","name":"C"},{"_id":"5b9692afdbc5ae16048dc5ee","role":"Leader","name":"D","subs":[{"_id":"5b9692afdbc5ae16048dc5ef","role":"Employee","name":"E"}]}] */
const data2 = new Team(team2);
然后一名员工想要更改他/她的姓名,我如何从一个请求中在两个团队中更新它?
如果我不能,我想我必须更改我的架构配置,最好的方法是什么?(请记住,我需要在一个来自 json 的请求中创建团队)
解决方案
推荐阅读
- vba - 使用硒从 VBA 中的 Css 元素中获取价值
- objective-c - Mac Catalyst 中的鼠标滚动
- discord - discord.js 在 oauth2 之后获取用户的所有行会
- java - 如何将 Spring Boot 安全 API 连接到 Android 应用程序
- python - 具有月份频率的熊猫日期范围
- javascript - Heroku 服务器上的 CORS 策略问题
- twitter-bootstrap - 如何在 Bootstrap 网格中创建 v-for 循环?
- python - Flask-将数据从数据库保存到列表
- python - 在python pandas中创建按周滚动分组的列的滚动总和
- javascript - 如何修复类型无效 - 期望字符串(用于内置组件)或 react.js 中的类/函数?