【发布时间】:2020-05-28 23:15:10
【问题描述】:
我想为我的 NestJs API 创建一个包含键/值对的 mongodb 文档。所以键应该是String 类型和Object 类型的值,因为我希望值能够保存任何东西。基于这个问题
https://github.com/Automattic/mongoose/issues/3638#issuecomment-161359387
看来我必须使用 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);
}
}
不幸的是,当我想用这些值创建一个新映射时
id => "foobar"
值 => { foo: "bar" }
我得到了错误
MongooseError:文档在保存之前必须有一个 _id。
我也尝试将代码更新为
this.mappingModel({ _id: id, value });
但这没有帮助。我该如何解决?
【问题讨论】:
标签: javascript mongodb mongoose nestjs