将 MongoDB 中的 ObjectId 与 mysql 结合使用
Use ObjectId from MongoDB with mysql
他们是否有可能将 mongoDB ObjectID 系统与 MySql 和 typeORM 一起使用,而不是使用增量 ID?
目标是像这样定义我的实体:
@Entity()
export class RolePermission implements IRolePermission {
@ObjectIdColumn() id?: ObjectID;
@Column()
@IsNotEmpty()
roleId: ObjectID;
@Column()
@IsNotEmpty()
permissionId: ObjectID;
}
因此,我的实体可以拥有一个 ID,甚至无需持久化。 ObjectId 系统将防止我想用于此列的唯一约束发生冲突。
如果可以实施这样的系统,它们的性能是否有缺点?我记得用 PHP 实现了这样一个系统,当时,我读到了这个让我觉得没问题的回复:Is there a REAL performance difference between INT and VARCHAR primary keys?
其实很简单。您只需使用 mongodb
包中的 ObjectID 对象并像往常一样声明您的实体。
首先,安装mongodb依赖项:
yarn add mongodb
yarn add @types/mongodb
然后,声明您的实体。这里有一个用户和文章之间的工作关系的例子:
user.entity.ts
:
import { Entity, Column, ManyToOne, PrimaryColumn } from 'typeorm';
import { Article } from './article.entity';
import { ObjectID } from 'mongodb';
@Entity()
export class User {
constructor() {
this.id = (new ObjectID()).toString();
}
@PrimaryColumn()
id: string;
@Column({ length: 500 })
username: string = null;
@OneToMany(type => Article, article => article.user)
articles: Article[];
}
article.entity.ts
:
import { Entity, Column, ManyToOne, PrimaryColumn } from 'typeorm';
import { User } from './user.entity';
import { ObjectID } from 'mongodb';
@Entity()
export class Article {
constructor() {
this.id = (new ObjectID()).toString();
}
@PrimaryColumn()
id: string;
@Column({ length: 500 })
title: string = null;
@ManyToOne(type => User, user => user.articles, {nullable: true})
user: User;
}
并像往常一样使用它:
const user = new User();
user.username = 'email@adress.com';
const article = new Article();
article.title = 'Mon titre';
article.user = user;
await this.userRepository.save(user);
await this.articleRepository.save(article);
他们是否有可能将 mongoDB ObjectID 系统与 MySql 和 typeORM 一起使用,而不是使用增量 ID?
目标是像这样定义我的实体:
@Entity()
export class RolePermission implements IRolePermission {
@ObjectIdColumn() id?: ObjectID;
@Column()
@IsNotEmpty()
roleId: ObjectID;
@Column()
@IsNotEmpty()
permissionId: ObjectID;
}
因此,我的实体可以拥有一个 ID,甚至无需持久化。 ObjectId 系统将防止我想用于此列的唯一约束发生冲突。
如果可以实施这样的系统,它们的性能是否有缺点?我记得用 PHP 实现了这样一个系统,当时,我读到了这个让我觉得没问题的回复:Is there a REAL performance difference between INT and VARCHAR primary keys?
其实很简单。您只需使用 mongodb
包中的 ObjectID 对象并像往常一样声明您的实体。
首先,安装mongodb依赖项:
yarn add mongodb
yarn add @types/mongodb
然后,声明您的实体。这里有一个用户和文章之间的工作关系的例子:
user.entity.ts
:
import { Entity, Column, ManyToOne, PrimaryColumn } from 'typeorm';
import { Article } from './article.entity';
import { ObjectID } from 'mongodb';
@Entity()
export class User {
constructor() {
this.id = (new ObjectID()).toString();
}
@PrimaryColumn()
id: string;
@Column({ length: 500 })
username: string = null;
@OneToMany(type => Article, article => article.user)
articles: Article[];
}
article.entity.ts
:
import { Entity, Column, ManyToOne, PrimaryColumn } from 'typeorm';
import { User } from './user.entity';
import { ObjectID } from 'mongodb';
@Entity()
export class Article {
constructor() {
this.id = (new ObjectID()).toString();
}
@PrimaryColumn()
id: string;
@Column({ length: 500 })
title: string = null;
@ManyToOne(type => User, user => user.articles, {nullable: true})
user: User;
}
并像往常一样使用它:
const user = new User();
user.username = 'email@adress.com';
const article = new Article();
article.title = 'Mon titre';
article.user = user;
await this.userRepository.save(user);
await this.articleRepository.save(article);