Prisma 和 MongoDB 复合类型

Prisma and MongoDB Composite Types

提问人:Blake 提问时间:8/4/2022 更新时间:8/5/2022 访问量:297

问:

我是第一次与 Prisma 合作,我不确定我是否以正确的方式处理这件事。

这是我的架构的一个片段

model Economy {
  id      String @id @default(auto()) @map("_id") @db.ObjectId
  shops   Shop[]
}

type Shop {
  id          Int @default(0)
  name      String     @default("")
  items     ShopItem[]
  EconomyId String?    @db.ObjectId
}

type ShopItem {
  id          Int @default(0)
  enabled     Boolean       @default(true)
  name        String        @default("")
  price       Int           @default(0)
  description String       @default("")
  commands    ShopCommand[]
}

type ShopCommand {
  command    String    @default("")
}

这当然有效,我很容易在 JavaScript 中解构,但是插入和更新很复杂。下面是更新“ShopItem”的示例

        const newItem = {
            id: 2,
            name: body.name,
            price: parseInt(body.price),
            description: body.description,
            enabled: body.enabled == 'true', 
            commands: newCommands
        }   

        const newEconomy = await prisma.economy.update({
            where: {
                guildId: guildId,                    
            },
            data: {
                shops: {
                    updateMany: {
                        where: {
                            id: 0,
                        } ,
                        data: {
                            items : {
                                push: [newItem]
                            }
                        }
                    }
                }
            }
        }) 

这很难读,我觉得我做错了。

我研究了其他人是如何做同样的事情的,但我没有找到太多信息。我什至应该使用复合类型,每个类型都应该在它自己的集合中吗?

MongoDB Prisma 复合类型

评论


答:

1赞 Austin Crim 8/5/2022 #1

它看起来像并且可能是他们自己的。它们在本质上看起来足够复杂和相关,可以保证一个单独的实体。ShopShopItemmodel

复合类型最适合较小的结构化数据片段,这些数据片段可能会在其他几个模型之间重复或共享,但不一定是关系型或唯一性的。

评论

0赞 Blake 8/5/2022
明白了。可以混合这样的系列吗?例如,用户 A 的商店商品将存储在用户 B 的商店商品旁边。在Mongo Compass中显示它时,这难道不会使它难以管理吗,或者是一种典型的模式