Node.js 如何使用TypeForm实体对系统建模

Node.js 如何使用TypeForm实体对系统建模,node.js,postgresql,express,typeorm,Node.js,Postgresql,Express,Typeorm,我正在使用typeORM创建一个express应用程序,以帮助将我的对象映射到我的数据库。我希望创建一个追随者系统。我的用户实体有一个基本布局,如下所示。但是,这将创建两个联接表。我只希望有一个表沿着“user\u follower\u user”的行,其中userId\u 1跟在userId\u 2后面。我想能够保持为每个用户以及追随者的数量帐户的数量。这可能吗?我还没有完全理解代码中发生了什么 import { Entity, PrimaryGeneratedColumn, Column,

我正在使用typeORM创建一个express应用程序,以帮助将我的对象映射到我的数据库。我希望创建一个追随者系统。我的用户实体有一个基本布局,如下所示。但是,这将创建两个联接表。我只希望有一个表沿着“user\u follower\u user”的行,其中userId\u 1跟在userId\u 2后面。我想能够保持为每个用户以及追随者的数量帐户的数量。这可能吗?我还没有完全理解代码中发生了什么

import { Entity, PrimaryGeneratedColumn, Column, ManyToMany, JoinTable, RelationCount } from 'typeorm';

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    firstName: string;

    @Column()
    lastName: string;

    @Column()
    email: string;

    @Column()
    password: string;

    @Column()
    bio: string;

    @ManyToMany( type => User, user => user.followers )
    @JoinTable()
    following: User[]

    @ManyToMany( type => User, user => user.following )
    @JoinTable()
    followers: User[]

    @RelationCount((user: User) => user.followers)
    followersCount: number;

    @RelationCount((user: User) => user.following)
    followingCount: number;
}
运行代码后,我的数据库架构如下所示:


如上所述,我觉得只需要一张桌子。尽管我对使用此ORM的追随者系统的其他合理模式持开放态度。

您的代码可以工作,但将追随者保留在一个数组中可能会在一段时间后变得非常糟糕。 查询数组更困难,也需要更长的时间。而且,您不能保留一些重要信息,如使用模式跟踪的时间。
您要做的是,创建另一个实体并保留follower和follower的id。像这个:

import { Entity, Column, CreateDateColumn } from 'typeorm';

@Entity()
export class Subscription {

  @Column()
  userId: number;

  @Column()
  folowingId: number;

  @CreateDateColumn()
  createdAt: Date;

}

通过查询此实体,现在可以轻松获得追随者或所有追随者的数量。

您的代码可以工作,但将追随者保留在数组中可能会在一段时间后变得非常糟糕。 查询数组更困难,也需要更长的时间。而且,您不能保留一些重要信息,如使用模式跟踪的时间。
您要做的是,创建另一个实体并保留follower和follower的id。像这个:

import { Entity, Column, CreateDateColumn } from 'typeorm';

@Entity()
export class Subscription {

  @Column()
  userId: number;

  @Column()
  folowingId: number;

  @CreateDateColumn()
  createdAt: Date;

}
通过查询这个实体,现在可以很容易地获得追随者或所有追随者的数量