如何基于其ObjectId删除嵌套对象?

Millw0

我的课程集合具有此嵌套模式,每个课程中都有一个会话数组,每个会话中都有一个学生数组,每个学生都是一个对象,该对象由userName属性组成,其ObjectId值引用我的用户集合,另一个属性命名状态,其中包含一些数字。

我想从我的会话的学生数组中删除其_id的学生对象。

我知道可以放宽对单个对象的控制,但是我需要一种整洁的方式,例如使用objectId从数据库中删除对象,这样我们就不必指定直接删除或修改嵌套子文档的路径。

这是我的课程架构:

 CourseSchema = new mongoose.Schema({
    name:String,
    sessions:[
        {
         date:Date,
         students :[{
             userName:{
                type:mongoose.Schema.Types.ObjectId,
                ref :'users'
             },
             status:Number
         }]   
        }
    ]
})
苏莱曼·萨

您可以使用以下DELETE路线从课程中删除学生。

router.delete(
  "/course/:courseId/session/:sessionId/student/:studentId",
  async (req, res) => {
    try {
      let result = await Course.updateOne(
        { _id: req.params.courseId, "sessions._id": req.params.sessionId },
        {
          $pull: { "sessions.$.students": { userName: req.params.studentId } }
        }
      );

      res.send(result);
    } catch (err) {
      console.log(err);
      res.status(500).send("Something went wrong");
    }
  }
);

假设您有一门这样的课程:

{
    "_id" : ObjectId("5de907acdfcef9493cd215a8"),
    "name" : "Course 1",
    "sessions" : [
        {
            "date" : ISODate("2019-12-05T16:32:41.998+03:00"),
            "_id" : ObjectId("5de907acdfcef9493cd215a9"),
            "students" : [
                {
                    "_id" : ObjectId("5de907acdfcef9493cd215ac"),
                    "userName" : ObjectId("5de8e4c8f74cf254d04f90d8"),
                    "status" : 1
                },
                {
                    "_id" : ObjectId("5de907acdfcef9493cd215ab"),
                    "userName" : ObjectId("5de8e4d5f74cf254d04f90d9"),
                    "status" : 1
                },
                {
                    "_id" : ObjectId("5de907acdfcef9493cd215aa"),
                    "userName" : ObjectId("5de8e4ddf74cf254d04f90da"),
                    "status" : 1
                }
            ]
        }
    ],
    "__v" : 0
}

如果我们要删除userName和value的学生5de8e4ddf74cf254d04f90da,则可以使用以下网址将DELETE请求发送到我们的路线:

http://localhost/courses/5de907acdfcef9493cd215a8/session/5de907acdfcef9493cd215a9/student/5de8e4ddf74cf254d04f90da

5de907acdfcef9493cd215a8->课程编号

5de907acdfcef9493cd215a9-> sessionId

响应将是这样的:

{
    "n": 1,
    "nModified": 1,
    "ok": 1
}

当我们看我们的课程时,我们看到该学生已被删除:

{
    "_id" : ObjectId("5de907acdfcef9493cd215a8"),
    "name" : "Course 1",
    "sessions" : [
        {
            "date" : ISODate("2019-12-05T16:32:41.998+03:00"),
            "_id" : ObjectId("5de907acdfcef9493cd215a9"),
            "students" : [
                {
                    "_id" : ObjectId("5de907acdfcef9493cd215ac"),
                    "userName" : ObjectId("5de8e4c8f74cf254d04f90d8"),
                    "status" : 1
                },
                {
                    "_id" : ObjectId("5de907acdfcef9493cd215ab"),
                    "userName" : ObjectId("5de8e4d5f74cf254d04f90d9"),
                    "status" : 1
                }
            ]
        }
    ],
    "__v" : 0
}

如我们所见,具有用户名和值的学生5de8e4ddf74cf254d04f90da在课程中不再存在,这意味着它已被删除。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在React的嵌套数组中基于其索引删除对象?

如何使用存储库接口在Spring Data中通过其嵌套对象的objectId查找集合?

如何在Mongoose中删除带有其对象ID的嵌套数组对象值?

如何删除嵌套对象属性

如何基于动态键创建嵌套对象

删除基于ID和类型的嵌套数组对象?

从嵌套的 JS 对象中删除其属性后删除空对象

如何删除没有ID /类别但基于其scr的iframe

如何从嵌套对象数组中删除元素?

如何删除嵌套的 JSON 对象成员

RethinkDB:Javascript-如何删除嵌套对象

Underscorejs:如何按属性删除嵌套对象?

如何从深度嵌套对象的状态中删除?

如何删除所有嵌套的JSON对象?

如何删除深度嵌套对象数组的注释

如何通过其嵌套数据删除Firebase中的父母?

Spring Data Mongo:如何通过其字段返回嵌套对象?

嵌套在对象中的函数如何知道其路径?

Javacript对象数组-基于嵌套对象从数组中删除重复的对象

如何基于嵌套键值删除JSONB列中的数组元素?

基于嵌套对象过滤嵌套对象数组

如何在mongo控制台中按其ObjectId搜索对象?

如何访问和删除/删除嵌套 Javascript 对象中的属性?

如何基于嵌套数组中的值返回对象?(Javascript)

如何基于嵌套对象的多个比较进行流排序?

如何从嵌套对象数组中删除任何空对象

如何删除引用对象的所有嵌套对象?

如何从JavaScript中的数组中删除嵌套对象或父对象

如何改进清理嵌套对象的方法以删除空对象