如何将文档插入mongoose中的2个集合?

如何将文档插入mongoose中的2个集合?,mongoose,collections,insert,updates,Mongoose,Collections,Insert,Updates,我有2个集合(员工、HRM员工) 员工模式为: var EmployeeSchema = new Schema({ name: String, code: String, //unique age : number, phoneNumber: number, }); var HrmEmployeeSchema = new Schema({ name: String, code: String, //unique age : num

我有2个集合(员工、HRM员工)

员工模式为:

var EmployeeSchema = new Schema({
    name: String,
    code: String, //unique
    age : number,
    phoneNumber: number,
    });
var HrmEmployeeSchema = new Schema({
    name: String,
    code: String, //unique
    age : number,
    phoneNumber: number,
    address: String,
    startDateWork: date,
    organization : String
    });
hrmEmployee架构是:

var EmployeeSchema = new Schema({
    name: String,
    code: String, //unique
    age : number,
    phoneNumber: number,
    });
var HrmEmployeeSchema = new Schema({
    name: String,
    code: String, //unique
    age : number,
    phoneNumber: number,
    address: String,
    startDateWork: date,
    organization : String
    });
HRMEMemployee是一个用于扩展员工信息的集合。我希望在创建员工时,同时创建hrmEmployee。以下是我的解决方案:

var data ={
name: "test001",
code: "A01",
age : 20,
phoneNumber : 123123123
}

var employee = new Employee(data);
    employee
    .save()
  .then( result => {
    if(result){
    var hrmEmployee = new HrmEmployee(data)
            hrmEmployee.save()
    }
  }).catch( err => console.log(err))

有谁有更好的解决方案吗?

您可能可以使用异步等待语法来提高代码的可读性

async function saveEmployee() {
  try {
     const data = {
      name: "test001",
      code: "A01",
      age : 20,
      phoneNumber : 123123123
    };
    
    const employee = new Employee(data);
    await employee.save();

    const hrmEmployee = new HrmEmployee(data)
    await hrmEmployee.save();

  } catch (err) {
    console.log(err);
  }
}
此外,在两个不同的文档中复制相同的信息并不理想,因为在更新信息时,您必须始终保持两个文档的同步。更好的方法是在hrmEmployee模式中引用employee文档id,并在hrmEmployee中添加额外的字段

var HrmEmployeeSchema = new Schema({
    employeeId: {
      type: ObjectId,
      ref: "Employee"
    },
    address: String,
    startDateWork: date,
    organization : String
 });

这样说,如果要确保两个文档总是被创建,则应该考虑使用MangGDB事务来确保跨集合的原子性。您可以在此处阅读更多有关事务的信息-