使用 TypeORM 将对象类型的值保存到 MongoDB
我想使用 TypeORM 将键值对存储到 MongoDB。我的后端 API 是用 NestJs 制作的(不确定这是否重要)。键的类型为
string
,值的类型为
object
,因为我想将
任何内容
存储到此对象。
这是我的 TypeORM 数据库配置
TypeOrmModule.forRoot({
type: 'mongodb',
host: 'localhost',
port: 27017,
database: 'nest',
entities: [`${__dirname}/**/*.entity.{ts,js}`],
synchronize: true,
}),
我的映射实体不会自动生成键,因为我想自行设置它
@Entity()
export class Mapping extends BaseEntity {
@PrimaryColumn()
key: string;
@Column()
value: object;
}
当我想将新映射保存到数据库时,我会运行此逻辑(保存到哪里并不重要)
const newMapping: Mapping = new Mapping();
newMapping.key = 'foobar';
newMapping.value = { foo: 'bar' };
await newMapping.save();
我在执行数据库实体的
save
函数时收到此错误
TypeError: Cannot read property 'propertyName' of undefined
。似乎我无法将
object
类型的值存储到数据库。有什么解决方案吗?
使用 TypeORM + Mongo 时,您的实体必须使用
ObjectIdColumn
装饰器来装饰其 ID 列,例如
import {Entity, ObjectID, ObjectIdColumn, Column} from "typeorm";
@Entity()
export class Mapping {
@ObjectIdColumn()
key: ObjectID;
@Column()
value: ;
}
Defining entities and columns is almost the same as in relational databases, the main difference is that you must use
@ObjectIdColumn
instead of@PrimaryColumn
or@PrimaryGeneratedColumn
.
您可以尝试 NestJS 对 MongoDB 的支持。
TypeORM has basic MongoDB support. Most of TypeORM functionality is RDBMS-specific, this page contains all MongoDB-specific functionality documentation. typeorm docs.
尝试使用 NestJS 方法。他们为 MongoDB 构建了一个模块,需要编写的代码更多一些,但比 Typeorm 更注重 mongo。它使用 npm mongoose 包。我目前使用这个,它工作得很好,而且实现起来并不难。
这是他们关于 NestJS / MongoDB 的文档。 MongoDB | NestJS
希望这对您有帮助!