Javascript 保存时使用字符串作为mongoose模型的自定义id
我想为我的NestJSAPI创建一个包含键/值对的mongodb文档。因此,键的类型应该是Javascript 保存时使用字符串作为mongoose模型的自定义id,javascript,mongodb,mongoose,nestjs,Javascript,Mongodb,Mongoose,Nestjs,我想为我的NestJSAPI创建一个包含键/值对的mongodb文档。因此,键的类型应该是String,值的类型应该是Object,因为我希望值能够保存任何内容。基于这个问题, 似乎我必须使用id字段,而不是将密钥字段命名为“key”。首先,我创建了一个保存相关信息的界面 export interface Mapping { id: string; // this should be "key" value: object; } 接下来,我为这个映射创建了模式。我想我不必在这里指定i
String
,值的类型应该是Object
,因为我希望值能够保存任何内容。基于这个问题,
似乎我必须使用id字段,而不是将密钥字段命名为“key”。首先,我创建了一个保存相关信息的界面
export interface Mapping {
id: string; // this should be "key"
value: object;
}
接下来,我为这个映射创建了模式。我想我不必在这里指定id字段,但我必须禁用id的自动生成
import * as mongoose from 'mongoose';
export const MappingSchema: any = new mongoose.Schema(
{
value: Object,
},
{ _id: false },
);
最后,我想在映射服务中使用这个模型。为了测试,我创建了一些函数
@Injectable()
export class MappingsService {
constructor(
@InjectModel('Mapping') private readonly mappingModel: Model<Mapping>,
) {}
public async getMappings(): Promise<Mapping[]> {
return this.mappingModel.find();
}
public async getValueByKey(id: string): Promise<object> {
const mapping: Mapping = await this.mappingModel.findById(id);
if (!mapping) {
// throw some errors
}
return mapping.value;
}
public async createMapping(id: string, value: object): Promise<Mapping> {
const existingMapping: Mapping = await this.mappingModel.findById(id);
if (existingMapping) {
// throw some errors
}
const newMapping: any = new this.mappingModel({ id, value });
return newMapping.save(newMapping);
}
}
但这没用。我怎样才能解决这个问题?试试这个
this.mappingModel({ _id: id, value });
export type FooDocument = Foo & Document & {
_id: string;
};