You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MongoDB updateOne与$pull删除嵌套数组元素失败求助

问题分析与解决方案

存在的问题

  • 语法错误:第一行const listName = "Holiday; 缺少闭合的双引号,会直接导致代码执行报错。
  • $pull匹配逻辑错误:你用new Item({name: "Sleep"})创建了新的Item对象,这个对象会包含MongoDB自动生成的_id,但数据库中名为"Sleep"的item有自己的唯一_id,两者完全不匹配,所以$pull无法定位到要删除的元素。

修正后的代码

const listName = "Holiday";
User.updateOne(
  { username: req.user.username },
  { $pull: { "lists.$[updateList].items": { name: "Sleep" } } },
  {
    arrayFilters: [
      { "updateList.name": listName }
    ]
  }
).exec().then(function(){
  console.log("Deleted successfully");
  res.redirect("/list-"+listName);
})

说明

  • 修复了字符串未闭合的语法问题;
  • 直接在$pull中指定{ name: "Sleep" }作为匹配条件,只要items数组中元素的name字段等于"Sleep"就会被移除,无需创建多余的Item实例;
  • 保留了原有的arrayFilters逻辑,能正确定位到名为"Holiday"的lists子文档。

内容的提问来源于stack exchange,提问作者Aryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 03:13:17