【问题标题】:Mongoose Pull one element from a nested Array by ObjectIDMongoose 通过 ObjectID 从嵌套数组中拉出一个元素
【发布时间】:2021-04-01 13:39:05
【问题描述】:

我有一个 Schedule 架构,我正在尝试从嵌套的 slotsPerDay 数组中获取一个元素。

const scheduleSchema =  mongoose.Schema({
    course_id: {{type: mongoose.Schema.Types.ObjectId, ref: 'course' }}, 
    week_schedule: [{
        day: {type: String, required: true },
        slotsPerDay: [{type: mongoose.Schema.Types.ObjectId, ref: 'slots' }],
    }]
});

我正在尝试从封装在 week_schedule 数组中的 slotPerDay 数组中删除某个插槽 ObjectID,如下所示。

 SchemaModel.findOneAndUpdate(
         {course_id: req.body.course_id},
         { "$pull": { "week_schedule": { "slotsPerDay": {"_id": req.body.slotID }}}}
 ,{new:true})

但是,此查询会删除整个 week_schedule 数组及其所有插槽,而不仅仅是与查询中给出的 slotID 的映射。有什么帮助解决这个问题吗?

我试过{ "$pull": { "week_schedule.slotsPerDay": {"_id": req.body.slotID }}} 但我得到了错误

不能使用 (week_schedule.slotsPerDay) 的部分 (slotsPerDay) 来 遍历元素 ({week_schedule: [ { slotsPerDay: [ ObjectId('5fe0263872f7b53aac93334a'), ObjectId('5fe0263872f7b53aac933349'), ObjectId('5fe0263872f7b53aac93334b'), ObjectId('5fe0263872f7b53aac93334c'), ObjectId('5fe0263872f7b53aac93334d'), ObjectId('5fe0263872f7b53aac93334e'), ObjectId('5fe0263872f7b53aac93334f'), ObjectId('5fe0263872f7b53aac933350')],_id: ObjectId('5fe0266a72f7b53aac933364'),天:“星期六”},{ slotPerDay:[],_id:ObjectId('5fe0266a72f7b53aac933365'),天: "星期日" }, { slotPerDay: [], _id: ObjectId('5fe0266a72f7b53aac933366'), day: "Monday" }, { slotsPerDay: [对象ID('5fe0263872f7b53aac933356'), ObjectId('5fe0263872f7b53aac933357'), ObjectId('5fe0263872f7b53aac933359'), ObjectId('5fe0263872f7b53aac93335a')],_id: ObjectId('5fe0266a72f7b53aac933368'), day: "星期三" }, { slotPerDay: [ ObjectId('5fe0263872f7b53aac93335b'), ObjectId('5fe0263872f7b53aac93335c'), ObjectId('5fe0263872f7b53aac93335d'), ObjectId('5fe0263872f7b53aac93335e'), ObjectId('5fe0263872f7b53aac93335f'), ObjectId('5fe0263872f7b53aac933360'), ObjectId('5fe0263872f7b53aac933361'), ObjectId('5fe0263872f7b53aac933362')],_id: ObjectId('5fe0266a72f7b53aac933369'), day: "星期四" } ]})

【问题讨论】:

  • 您是要从week_schedule 数组中删除一天还是从嵌套的slotsPerDay 数组中删除一个元素?
  • 嵌套 SlotsPerDay 中的一个元素

标签: javascript node.js mongodb mongoose


【解决方案1】:

试试这个:

SchemaModel.findOneAndUpdate(
     { course_id: req.body.course_id },
     { $pull: { "week_schedule.$[].slotsPerDay": req.body.slotID }},
     { new: true })

它使用all positional operator$[]。对于week_schedule 数组中的所有元素,它会从嵌​​套的slotsPerDay 数组中拉取值等于req.body.slotID 的元素。

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 2020-11-01
    • 1970-01-01
    • 2022-01-15
    • 2023-02-18
    • 2020-11-03
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多