【问题标题】:Insert and remove item from sub-array in MongoDB从 MongoDB 的子数组中插入和删除项目
【发布时间】:2021-07-10 01:25:36
【问题描述】:

我正在尝试插入新数据并从 MongoDB 中删除数据,但不知道如何操作。
这有点复杂。
谁能教我怎么做?

例如, Class1-1 有 3 名学生,他们选修了几门不同的课程。

爱丽丝:数学、科学、音乐
Bob:数学、音乐、中文
卡尔:音乐、科学

我们将数据存储在 mongodb 中是这样的:

{
    className: "1-1"
    students:["Alice","Bob","Carl"],
    subjects:[
        {"Math":["Alice","Bob"]},
        {"Science":["Alice","Carl"]},
        {"Music":["Alice","Bob","Carl"]},
        {"Chinese":["Bob"]}
    ] 
}

我如何插入新学生或移除学生?

插入一个新学生

新生 --> Daniel:数学、英语

Step1. 将“Daniel”推送到“students”数组
Step2. 将“Daniel”推送到主题数组
Step2. 1.将“Daniel”推送到subjects.Math数组。
Step2.2.创建一个新主题subject.English,然后将“Daniel”推送到主题.英语

结果是

{
    className: "1-1"
    students:["Alice","Bob","Carl","Daniel"],
    subjects:[
        {"Math":["Alice","Bob","Daniel"]},
        {"Science":["Alice","Carl"]},
        {"Music":["Alice","Bob","Carl"]},
        {"Chinese":["Bob"]},
        {"Englsih":["Daniel"]}
    ] 
}

移除学生:Bob

第 1 步: 从学生数组中删除“Bob”。
第 2 步: 从科目数组中删除“Bob”。
在第 2 步:有两种不同的情况。
情况1:我们事先知道 Bob 上了什么科目。
情况2:我们不知道什么科目鲍勃接过。

结果是

 {
    className: "1-1"
    students:["Alice","Carl","Daniel"],
    subjects:[
        {"Math":["Alice","Daniel"]},
        {"Science":["Alice","Carl"]},
        {"Music":["Alice","Carl"]},
        {"Chinese":[]},
        {"Englsih":["Daniel"]}
    ] 
}

如果subject数组同时为空,是否可以移除subject对象?

结果是

 {
    className: "1-1"
    students:["Alice","Carl","Daniel"],
    subjects:[
        {"Math":["Alice","Daniel"]},
        {"Science":["Alice","Carl"]},
        {"Music":["Alice","Carl"]},
        {"Englsih":["Daniel"]}
    ] 
}

我们可以改变科目结构,处理起来会更容易

{
    className: "1-1"
    students:["Alice","Carl","Daniel"],
    subjects:[
        {"subject": "Math", "student":["Alice","Daniel"]},
        {"subject": "Science", "student":["Alice","Carl"]},
        {"subject": "Music", "student":["Alice","Carl"]},
        {"subject": "Englsih", "student":["Daniel"]}
    ] 
}

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    我想知道您是否可以简化更改文档结构的方案。

    例如,每个班级和主题都有一个文档。

    {
        className : "1-1",
        subject : "Math",
        students : ["Alice","Bob"]
    }
    

    这样学生数组更容易管理。

    【讨论】:

    • 这个场景是为了总结。我们希望尽快得到结果 1)学生在这门课上修了多少门课? 2) 谁在这门课上选修这门课?此数据为模拟数据,真实数据与蛋白质有关。这是一个大规模的数据。我们可以改成科目:[{subject: Math, students:[Alice,Bob..]}],但不能改成你说的结构。
    猜你喜欢
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 2019-07-22
    • 2012-02-21
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多