如何在mongoose模式中定义ObjectId类型的动态对象属性?

kb5ga3dv  于 2022-12-23  发布在  Go
关注(0)|答案(1)|浏览(112)
    • bounty将在6天后过期**。回答此问题可获得+50声望奖励。turivishal希望引起更多人关注此问题。

当前模式如下所示:

const schema = new mongoose.Schema(
    filters: {
        type: Object,
        default: {}
    }
);

输入文件样本:

{
  filters: {
    field1: "5a934e000102030405000001",
    field2: "5a934e000102030405000002",
    field3: "5a934e000102030405000003"
  }
}

filters对象属性将存储动态属性/字段,但所有都将是ObjectId类型,
目前,我使用pre-hook和lodash方法将类型转换为ObjectId类型。

SchemaObj.pre('save', function (next) {
    this.filters = _.reduce(this.filters, (r, v, k) => v ? { ...r, [k]: mongoose.Types.ObjectId(v) } : r, {});
    next();
});

有没有办法定义ObjectId类型的动态对象字段?
如果mongoose提供任何其他方法,我期待这样的东西:

const schema = new mongoose.Schema(
    filters: {
        type: {
          *: mongoose.Types.ObjectId
        }
    }
);
n3h0vuf2

n3h0vuf21#

您可以将字段定义为Map

const schema = new mongoose.Schema(
    filters: {
        type: Map,
        of: mongoose.Schema.Types.ObjectId
    }
);

相关问题