Я хотел бы создать документ mongodb, содержащий пары ключ / значение для моего Nest Js API. Таким образом, ключ должен иметь тип String
и значение типа Object
, потому что я хочу, чтобы значение могло содержать что угодно . Исходя из этой проблемы
https://github.com/Automattic/mongoose/issues/3638#issuecomment -161359387
кажется, что я должен использовать поле идентификатора вместо того, чтобы называть поле ключа "ключ". Сначала я создал интерфейс, содержащий соответствующую информацию
export interface Mapping {
id: string; // this should be "key"
value: object;
}
Затем я создал схему для этого сопоставления. Я думаю, мне не нужно указывать поле 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);
}
}
К сожалению, когда я хочу создать новое отображение с этими значениями
id => "foobar"
value => {foo: "bar"}
Я получаю ошибку
MongooseError: документ должен иметь _id перед сохранением.
Я также пытался обновить код до
this.mappingModel({ _id: id, value });
, но это не помогло. Как я могу это исправить?