【问题标题】:Typegoose + nestjs + mongodb: index not creating using @index decoratorTypegoose + nestjs + mongodb:索引未使用@index 装饰器创建
【发布时间】:2021-04-13 11:50:57
【问题描述】:

我遇到了 typegoose 的错误。我有一个名为SP 的模型,我必须在其名为geoLocation 的属性上创建2dsphere 索引我尝试了typegoose 装饰器@index,但即使它没有抛出任何错误,它也无法正常工作,我不知道发生了什么以及typegoose 如何处理它。有没有人给我解决方法???。

代码:

import { Prop, index, modelOptions, Severity } from '@typegoose/typegoose';
import { BaseModel } from '../base.model';
import { Factory } from 'nestjs-seeder';

export enum SPStatus {
    INAVTIVE = "INAVTIVE",
    ACTIVE = "ACTIVE",
}

@modelOptions({ options: { allowMixed: Severity.ALLOW } })
@index({ geoLocation: '2dsphere' }, {})
export class SP extends BaseModel{
    @Factory(faker => faker.company.companyName())
    @Prop({ required: true, index: true, text: true })
    businessName : string
    
    @Factory(faker => {
        let data = {
            type : "Point",
            coordinates:[Number(faker.address.longitude()), Number(faker.address.latitude())]
        }
        console.log(data);

        return data;
    })
    @Prop({ required: false })
    geoLocation: {
        type: string,
        coordinates: [number]
    }
}

【问题讨论】:

  • 您是在尝试将索引添加到现有集合还是新集合? (如果已有收藏,您是否已经尝试过Model.syncIndexes?)

标签: node.js mongodb typescript nestjs typegoose


【解决方案1】:

试试下面对我有用的代码

@index({ location: '2dsphere' })
export class GPSData extends Typegoose{    
    
    @prop({ required: true })
    public log_Id!: mongoose.Types.ObjectId;

    @ValidateNested({each: true})
    @prop({
        _id : false
    })
    readonly location: Location;
}

export class Location extends Typegoose{  
   
    @prop()
    @IsString({message: " type should be text"})
    readonly type: String;

    @prop({ required: true })
    coordinates: [[Number]];
}

样本集合(类型可以是“Point”、“MultiPoint”、“LineString”、“MultiLineString”、“Polygon”、“MultiPolygon”和“GeometryCollection”之一):

{ 
"log_Id": "5fbdec08ce02d61fec9a0189",

"location":{
    "type":"MultiPoint",
    "coordinates":[
 [ -73.9580, 40.8003 ],
 [ -73.9498, 40.7968 ],
 [ -73.9737, 40.7648 ],
 [ -73.9814, 40.7681 ]
 ]  
}
}

【讨论】:

  • 提倡和描述您的解决方案是一种很好的做法
猜你喜欢
  • 2018-07-27
  • 2020-10-26
  • 1970-01-01
  • 2021-09-30
  • 2012-12-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2014-02-13
相关资源
最近更新 更多