【问题标题】:MongoDB/Mongoose schema unique not workingMongoDB/Mongoose 模式唯一不起作用
【发布时间】:2022-01-24 13:53:50
【问题描述】:

我想创建一个带有名称和其他字段的城市,名称应该是唯一的,但我可以创建具有相同名称的其他城市。 如何使名称在 mongoose 模式中唯一,以便在数据库中获得唯一的城市?

cities.service.ts

@Injectable()
export class CitiesService {

  constructor(
    @InjectModel('City') private readonly cityModel: Model<City>,
  ) {}

  async createCity(createCityDto: CreateCityDto) {
      const { name } = createCityDto;
      const city = new this.cityModel({ name });
      await city.save();
      return city;
  }
}

cities.controller.ts

@Post()
  @ApiCreatedResponse({ description: 'Create a new city' })
  @ApiBody({ type: CreateCityDto })
  @ApiConflictResponse({ description: 'This city already exists' })
  createCity(@Body() createCityDto: CreateCityDto) {
    return this.citiesService.createCity(createCityDto);
  }

city.model.ts

import * as mongoose from 'mongoose';

export const CitySchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
    unique: true,
  }
});

export interface City {
  id: mongoose.Schema.Types.ObjectId;
  name: string;
}

【问题讨论】:

  • unique 字段只是对应唯一索引的语法糖。请确保您告诉猫鼬在数据库端创建/更新索引 - 这是它们保证唯一性的地方。 mongoosejs.com/docs/guide.html#indexes
  • 现在可以使用了,谢谢@AlexBlex

标签: mongodb mongoose nestjs typeorm mongoose-schema


【解决方案1】:

确保在与数据库的连接上设置 autoIndex。还要确保您的数据没有混乱。如果您已经有 2 个名称在您的数据库中不是唯一的,它将不会遵循该选项。

【讨论】:

  • 应该将 autoIndex 设置为 true 还是 false?
猜你喜欢
  • 2019-11-06
  • 2012-06-25
  • 2023-03-07
  • 1970-01-01
  • 2016-09-11
  • 2011-08-21
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
相关资源
最近更新 更多