目的是从此出发:
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请求中创建团队)