Mongoose:定义一个模式属性,在Document对象中使用一个名称,在实际数据库中使用另一个名称

5uzkadbs  于 2023-03-03  发布在  Go
关注(0)|答案(1)|浏览(130)

我在应用中为一个集合定义了多个模型:培训生、员工、承包商、经理和被免职人员。
每个模型模式都有一个日期属性,表示人“进入”模型所表示的状态的时间:

const TraineeSchema = new Schema({
  ...
  accetedOn: Date,
  ...
});

const EmployeeSchema = new Schema({
  ...
  hiredOn: Date,
  ...
});

const ContractorSchema = new Schema({
  ...
  contractedOn: Date,
  ...
});

const ManagerSchema = new Schema({
  ...
  promotedOn: Date,
  ...
});

const RemovedSchema = new Schema({
  ...
  terminatedOn: Date,
  ...
});

在一种情况下,我执行一个基于这些属性过滤数据的聚合。如果所有这些属性在数据库中具有相同的名称,则代码将更简单。因此,例如,如果所有这些模式的data属性都命名为enteredIntoStatusOn,则我可以只使用:

{ $match: { enteredIntoStatusOn: { $gt: ... } }

有没有可能在模式中定义一个属性,它在mongoose Document对象中使用时只有一个名称,但实际上在数据库中以不同的名称保存?
我知道我可以使用别名来做类似的事情,例如,我可以使用定义的enteredIntoStatusOn来定义管理器模式,然后还定义一个名为promotedOn的虚拟字段,它只获取和设置enteredIntoStatusOn字段。promotedOnenteredIntoStatusOn都在Manager模型的文档中公开。在Mongoose中是否有方法只使用别名而不使用原始属性?

j1dl9f46

j1dl9f461#

最简单的方法是在模式中指定别名:

let s = new Schema({
    n: { type: String, alias: "name" }
});

这会自动创建getter和setter,因此可以在任何地方使用name而不是n

相关问题