Nest.js - 在猫鼬模式中创建索引

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)

两者都没有按预期工作。

有什么方法可以做到这一点?

谢谢

Pra*_*sad 9

这对我有用

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)