Mongoose 默认设置文档的 "id" 属性 等于文档的“_id”

Mongoose set "id" property of document to be equal to "_id" of the document by default

我有一个模型需要有“id”属性。由于它需要是唯一的,所以我想在创建后将其值设置为与文档的“_id”属性 相同。所以,我的模型看起来像这样:

const modelSchema = new Schema(
  {
    id: { type: String, unique: true },
    property_1: { type: String, unique: false }
    property_2: { type: String, unique: false }
    ...
  }
);

目前,我使用 2 个不同的查询来执行此操作,一个用于创建文档,一个用于在创建文档后用“_id”的值更新“id”属性。

Model.create({
    propery_1: value_1,
    propery_2: value_2,
    ...
}).then((document) => {
    document.id = document._id;
    document.save();
})

有没有办法定义我的架构以默认支持此功能(“id”属性 将自动设置为“_id”的值)。或者我可以用具有相同功能的查询替换这两个查询吗?

我通过从架构中删除“id”字段并定义虚拟 属性“id”来解决它。这样 Mongoose 会自动将字段“id”添加到文档中。代码如下所示:

const modelSchema = new Schema(
  {
    property_1: { type: String, unique: false }
    property_2: { type: String, unique: false }
    ...
  }, {
    toJSON: { virtuals: true },
    toObject: { virtuals: true }
  }
);

modelSchema.virtual('id', {
  id: this.id
});

添加 toJSON: { virtuals: true }toObject: { virtuals: true } 很重要,这样虚拟字段将默认添加到文档中。