【问题标题】:Remove a specific nested object from an array of objects从对象数组中删除特定的嵌套对象
【发布时间】:2019-11-02 00:43:48
【问题描述】:

我需要删除嵌套在对象数组中的特定对象。

下面的db结构如下:

我想根据 roomId(以查找特定房间)和团队 approved 状态删除其中一个团队。如果一个团队已经“批准:假”,则需要从对象数组中删除它。

我正在使用猫鼬并想出了以下方法,但没有成功:

     Room.update({"roomId": req.params.roomId},
        {"$pull": { "teams.approved": false } })

显示正确 roomId 的屏幕截图:

【问题讨论】:

  • Nicolas Maties 和 mickl 的答案是正确的,可能是 req.params.roomId 给你一个坏值,console.log(req.params.roomId) 并确保它有一个值
  • 它确实有一个值和正确的roomId,请看上面的截图

标签: mongodb mongoose


【解决方案1】:

数组名和相等条件应该像this例子一样单独指定,试试:

await Room.update({"roomId": req.params.roomId}, {"$pull": { "teams": { approved: false } } })

【讨论】:

  • 上面的方法我试过了,可惜没用
  • @Krelis 你能检查一下req.params.roomId 是否有期望值和类型吗?
  • 确实如此,请参阅上面初始帖子中的屏幕截图。
  • @Krelis 我在您的代码中没有看到任何回调/等待,这可能是问题所在,您能检查一下吗?
【解决方案2】:

我认为这样的事情应该可行:

Room.find({roomId: 1234}).then((result) => {
if (result) {
 return Room.remove({result.teams.approved: false})
 } 
} ).catch()

您仍然需要先找到与 roomId 编号匹配的所有结果,然后根据 approved 删除团队。可能有更好的方法来处理这个问题,但我认为这是一种公平的方法。

【讨论】:

  • TypeError: result.remove 不是函数
【解决方案3】:

Room.updateOne({ roomId: req.params.roomId}, {"$pull": { "teams": { approved: false } } })

这可能适用于您的情况。

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-02
    • 2019-02-09
    • 2019-04-30
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多