代码之家  ›  专栏  ›  技术社区  ›  Hammerbot

在mysql中使用MongoDB中的ObjectId

  •  1
  • Hammerbot  · 技术社区  · 6 年前

    他们是否有可能将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?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sylvain Attoumani    6 年前

    其实很简单。您只需要使用 mongodb 像平常一样打包和声明实体。

    首先,安装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);
    
    推荐文章