MongoDB/Mongoose 唯一的模式不起作用
MongoDB/Mongoose schema unique not working
我想创建一个带有名称和一些其他字段的城市,名称应该是唯一的,但我可以创建具有相同名称的其他城市。
如何使 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;
}
确保在与数据库的连接上设置 autoIndex。还要确保您的数据没有混乱。如果您的数据库中已有 2 个不唯一的名称,则不会遵循该选项。
我想创建一个带有名称和一些其他字段的城市,名称应该是唯一的,但我可以创建具有相同名称的其他城市。 如何使 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;
}
确保在与数据库的连接上设置 autoIndex。还要确保您的数据没有混乱。如果您的数据库中已有 2 个不唯一的名称,则不会遵循该选项。