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

MongoDB Atlas中文档未更新:findOneAndUpdate的$pull操作失效

问题:MongoDB $pull操作无法从数组中移除元素

我尝试从MongoDB数据库的数组中移除元素,使用findOneAndUpdate()方法能够定位到正确的文档,但$pull操作并未实际更新文档内容。

相关代码实现

删除接口代码

app.post("/delete", async (req, res)=>{
  const checkedItem = req.body.deleteItem;
  const listName = req.body.listName

  try{
    if(listName === "today"){
      await ItemModel.findByIdAndRemove(checkedItem);
      res.redirect("/")
      console.log("successfully deleted");
    }else{
      await listModel.findOneAndUpdate(
        {name: listName },
        {$pull: { itemsname: {_id: checkedItem}}},
        {new: true}
      );
      res.redirect("/"+ listName)
      console.log("item deleted from"+listName+checkedItem);
    }
  }catch(err){
    console.log(err)
  }
});

模型与Schema定义

const itemSchema = {
  name: String,
};

const ItemModel = mongoose.model("item", itemSchema);

const listSchema = {
  name: String,
  itemsname: {
    type: Array,
    default: [itemSchema]
  }
};

const listModel = mongoose.model("list", listSchema);

自定义列表路由代码

app.get("/:CustomListUrl", async (req, res) => {
  const CustomUrl = _.capitalize(req.params.CustomListUrl);

  try {
    const find = await listModel.findOne({ name: CustomUrl });

    if (!find) {
      await listModel.create({
        name: CustomUrl,
        itemsname: []
      })
      res.redirect("/" + CustomUrl)
    } else {
      res.render("list", { listtitle: CustomUrl, itemstodo: find.itemsname });
    }
  } catch (err) {
    console.log(err)
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:37:20