【问题标题】:MongoDb schema optimisation with hierarchical arrayMongoDb 模式优化与分层数组
【发布时间】:2020-09-30 22:39:48
【问题描述】:

你好, 我想听听您对如何构建 mongoDb 模式的建议。假设我有一个分层作业列表:

WebDevelopment :
    - php
    - html
    ....
MobileDevelopment : 
    - Kotlin
    - Java
    ....
... (and so on)

假设用户可以选择几种技术:php,kotlin ...,下面是我想象的一个简单的Schema:

// USER SCHEMA
const UserSchema:Schema = new Schema({
    jobs:[{
        type:String,
        ref: "job",
    }]
})
// JOB SCHEMA
const JobSchema:Schema = new Schema({
    jobs:{ type: String }
})

但是我如何构建工作的父/子?在查询 mongoDb 时,我想找到所有使用 php 和/或 kotlin 以及结构化数据子/父的用户。这可能吗?

如果我解释得不好,请告诉我。

PS : 我使用 nodejs 和 mongoose 作为 ODM

谢谢你,

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    让我们将您的技术(如 php、html、java)称为标签。然后您的标签有一个类型,即 Web 开发和移动开发。

    现在,事情很简单。

    // USER SCHEMA
    const UserSchema:Schema = new Schema({
        jobs:[{
            type: Schema.Types.ObjectId,
            ref: "Job",
        }]
    })
        // JOB SCHEMA
        const JobSchema:Schema = new Schema({
            tags:[{ type: Schema.Types.ObjectId, ref: "Tag" }]
        })
        // TAG SCHEMA
        const TagSchema:Schema = new Schema({
            name:{ type: String },
            ofType: {type: String }
        })
    

    【讨论】:

    • "ofType" 可以存储“Web Development”、“Mobile Development”等值。如果您对类别有更广泛的需求,那么您还可以创建一个 Category Schema 而不是使用“ofType”并将标签添加到类别架构中,具体取决于您要在数据中设置的关系,这可以扩展。我建议您查找数据库关系,例如一对一、一对多和多对多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多