【问题标题】:Keystone JS disable creating new item if it exsist in db如果数据库中存在 Keystone JS,则禁用创建新项目
【发布时间】:2020-05-08 02:45:22
【问题描述】:

我正在使用 keystone js,并且我的会话字段包含 日期和舞台应该是独一无二的

    keystone.createList('Stage', {
  fields: {
    name: {
      type: Text
    }
  }
});
keystone.createList('Day', {
  labelResolver: day => day.day,
  fields: {
    day: {
      label: 'Session Day',
      type: CalendarDay,
      format: 'Do MMMM YYYY',
      defaultValue: Date.now()
    }
  },
  schemaDoc: 'Session Day Date'
});
keystone.createList('Session', {
  labelResolver: () => 'Session',

  fields: {
    day: {
      type: Relationship,
      ref: 'Day',
      isRequired: true,
      isUnique: true,

    },
    stage: {
      type: Relationship,
      ref: 'Stage',
      many: false,
      isRequired: true,
      isUnique: true,
      hooks: {
        beforeChange: async () => { 

         },
      }
    }
  }

});

如果我创建了会话日和阶段,那么它们应该是独一无二的,我不应该再次创建它们。

例如,如果我有 {day: 2020-03-09, stage: Venture} 我应该无法再次创建同一天和舞台,因为它们已经存在于数据库中。

但我可以创造{day: 2020-03-09, stage: Miracle}

【问题讨论】:

    标签: javascript mongodb keystonejs


    【解决方案1】:

    如果您使用 mongodb 作为后端,您可以使用 adapterConfig 来执行此操作

    keystone.createList('MyList', {
      fields: {
        // other fields 
        day: { /* ... config */},
        stage: { /* ... config */},
      },
      adapterConfig: {
        configureMongooseSchema: (schema) => {
          try {
            schema.index({ day: 1, stage: 1 }, { unique: 1 });
          } catch (error) {
            console.log(error);
          }
        }
      },
    });
    

    【讨论】:

      猜你喜欢
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      相关资源
      最近更新 更多