Javascript TypeORM:如何使用UUID获取下一个项目?
在Order类中,我们有一个UUID和其他字段:Javascript TypeORM:如何使用UUID获取下一个项目?,javascript,arrays,sorting,uuid,typeorm,Javascript,Arrays,Sorting,Uuid,Typeorm,在Order类中,我们有一个UUID和其他字段: export class Order extends BaseEntity { @Field() @PrimaryGeneratedColumn("uuid") id: string; // other fields ... } 分解器可以是这样的: @Query(() => Order) async getNextOrder( @Arg("data") { o
export class Order extends BaseEntity {
@Field()
@PrimaryGeneratedColumn("uuid")
id: string;
// other fields ...
}
分解器可以是这样的:
@Query(() => Order)
async getNextOrder(
@Arg("data")
{ orderId }: GetNextOrderInput,
) {
return await Order.findOne(id:MoreThan(orderId);
}
我知道它不起作用,那么如何实现下一项呢?UUID是基于时间的,可以用作索引吗?正如我发现的
@PrimaryGeneratedColumn(“UUID”)
使用的UUID v4
是完全随机的,v1
一个是基于时间的,因此没有机会在UUID v4
的基础上排序。
@Generated(“increment”)
decorator是中提到的另一个选项
但我犯了错误,看来Postgres需要“increment”
作为主键。
因此,我更喜欢使用createdAt(日期类型)列进行订购,并通过LEAD获取下一个订单的Id:
PREPARE findNextId(uuid) AS(
WITH producedNextIds AS(
WITH ordersOfStore AS (
SELECT
"order"."id", "order"."createdAt"
From
"order"
INNER JOIN "site" ON "order"."storeId" = "site"."id"
)
SELECT "id" , "createdAt",
LEAD("id",1) OVER (
ORDER BY "createdAt"
) next_id
FROM
ordersOfStore
)
SELECT
"id" , "createdAt", next_id
FROM producedNextIds
WHERE
"id" = ($1)
);
EXECUTE findNextId('cb5c5bf0-f781-46e1-9ae1-68c875bb3a56');
任何更好的解决方案都将不胜感激