【问题标题】:How to design mongoose schema design for nested data如何为嵌套数据设计猫鼬模式设计
【发布时间】:2019-08-07 20:00:46
【问题描述】:

我正在构建一个 MERN 堆栈应用程序,我希望在其中包含嵌套数据。我无法弄清楚猫鼬模式设计。应该有像nameagephoto 这样的细节嵌套在year 下。下面是一个粗略的想法,它应该是什么样的想法。年份不应在架构中硬编码。

        2017 :{
            name: "Tony",
            age: 21,
            photo: "some url here"
          },
          {
            name: "Steve",
            age: 21,
            photo: "some url here"
          }
        2018 :{
            name: "Stark",
            age: 19,
            photo: "some url here"
          },
          {
            name: "Rogers",
            age: 21,
            photo: "some url here"
          }

【问题讨论】:

  • 这是一个非常粗略的想法,因为它甚至不是一个有效的对象结构。事物列表属于数组,并且命名的 kjey 没有列表。老实说 "nested" 实际上是你能做的最糟糕的事情。非常适合在客户端代码中快速查找,但对于数据库来说非常糟糕且不可行。只需执行{ year: 2018, name: "Stark", age: 19, photo: "some url here" },因为 "nesting" 实际上弊大于利。

标签: node.js mongodb express mongoose database-design


【解决方案1】:

你可以把它分成两个模式。 PhotoAlbums 包含一组照片对象引用。相册架构中的每个文档都可以是年份或将相似照片组合在一起的通用相册名称。照片模式将存储带有文件名和 URI 的实际照片文档。

PhotoAlbumSchema:
{
   name: String,
   year: Number,
   photos: [{ type: Schema.types.ObjectId, ref: "Photo"}] // array of photo objects
}

PhotoSchema
{
    filename: String,
    uri: String,
    description: String,
}

您插入到相册架构中的每个文档都可以链接一组照片对象引用 (ObjectIds)。更好的是,每个相册可以包含跨多个相册共享的照片集。您通过执行 Albums.find({}).populate('Photo') 来填充数据

【讨论】:

    猜你喜欢
    • 2015-05-20
    • 2017-08-01
    • 2014-12-09
    • 1970-01-01
    • 2019-03-22
    • 2014-02-13
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多