如何根据数据库中另一个字段的值来处理模型中特定的必填字段?

问题描述 投票:0回答:1

我正在尝试构建一个 Airbnb 克隆。根据您的房源是整个房源、私人房间还是共用房间,它会根据您的回答提供不同的选项来填写有关浴室和锁的信息。这就提出了这个问题。

我应该如何处理注册表要求根据其最终所属类别填写某些字段的情况? 如何允许创建具有自己需求的新类别,而无需添加另一个数据模型?

我考虑创建另一个模型来存储字段的名称及其值。但我觉得必须有一种更有组织性和实用性的方法来实现这一目标。

const CategoryRequiredFieldSchema = new mongoose.Schema({
  category_id: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Category",
    require: true,
  },
  required_field_name: { type: String, require: true },
  required_field_value: { type: mongoose.Schema.Types.Mixed, require: true },
});

javascript mongoose data-modeling
1个回答
0
投票

使用基于类别的动态验证:

const mongoose = require('mongoose');

const ListingSchema = new mongoose.Schema({
  type: { type: String, required: true },
  bathrooms: { type: Number },
  locks: { type: Boolean },
});

ListingSchema.pre('save', function(next) {
  if (this.type === 'entire place') {
    if (this.bathrooms == null) {
      return next(new Error('Bathrooms are required for entire place'));
    }
  } else if (this.type === 'private room') {
    if (this.locks == null) {
      return next(new Error('Locks are required for private room'));
    }
  }
  next();
});

const Listing = mongoose.model('Listing', ListingSchema);

在代码中创建类别及其规则。无需新模型即可调整验证逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.