开发者问题收集

使用 TypeORM 将对象类型的值保存到 MongoDB

2020-02-13
5240

我想使用 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 类型的值存储到数据库。有什么解决方案吗?

2个回答

使用 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 .

TypeORM Mongo Docs

Marian
2020-02-13

您可以尝试 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

希望这对您有帮助!

andressh11
2020-02-13