use*_*448 3 mongoose node.js nestjs
如何使用 Nest.js 在 mongoose 模式中创建属性索引?
我尝试将索引添加为属性选项,但尚未创建索引:
@Schema()
export class Schema extends Document {
@Prop()
_id: string;
@Prop({required: true, index: true})
type: string;
@Prop()
creationDate: string;
@Prop()
name: string;
}
export const MySchema = SchemaFactory.createForClass(Schema);
Run Code Online (Sandbox Code Playgroud)
我也试过这种方式:
export const MySchema = SchemaFactory.createForClass(Schema).index({ type: 1 });
Run Code Online (Sandbox Code Playgroud)
两者都没有按预期工作。
有什么方法可以做到这一点?
谢谢
这对我有用
export const MySchema = SchemaFactory.createForClass(Schema);
MySchema.index({ type: 1 }, { unique: true });
Run Code Online (Sandbox Code Playgroud)
同样可以扩展到复合索引 - 例如:
MySchema.index({ type: 1, name: 1 }, { unique: true });
Run Code Online (Sandbox Code Playgroud)
小智 6
使用以下选项创建索引
@Schema({useCreateIndex: true})
export class Schema extends Document {
@Prop()
_id: string;
@Prop({required: true, index: true})
type: string;
@Prop()
creationDate: string;
@Prop()
name: string;
}
export const MySchema = SchemaFactory.createForClass(Schema);
Run Code Online (Sandbox Code Playgroud)
useCreateIndex在定义架构时使用标志
或者在创建连接对象时全局设置相同的标志
{
uri: `....`,
user: ,
pass: ,
//useNewUrlParser: true,
useCreateIndex: true,
//useUnifiedTopology: true,
//useFindAndModify: false,
retryAttempts: 3
}
Run Code Online (Sandbox Code Playgroud)
还添加了其他可能需要的注释标志。
小智 5
如果有人像我一样来到这里寻找如何为地理位置/2dsphere 添加索引,您可以在 NestJs 中使用以下内容。
@Prop({ index: "2dsphere" })
Run Code Online (Sandbox Code Playgroud)
另外,当您设置 mongoose 模块时,请添加useCreateIndex: true.
MongooseModule.forRootAsync({
useFactory: async (config: ConfigService) => ({
uri: config.get('mongo_url'),
useNewUrlParser: true,
useCreateIndex: true,
}),
inject: [ConfigService],
})
Run Code Online (Sandbox Code Playgroud)