在Nodejs中使用mongoose从数组中删除项

zysjyyx4  于 2023-08-04  发布在  Node.js
关注(0)|答案(1)|浏览(92)

我正在做一个待办事项列表应用程序。我想从数组中删除一个元素,但使用Model.findOneAndUpdate()无法正常工作。如果我在语法上犯了错误,请帮助我,或者你可以建议另一种方法。

app.post("/delete", function(req,res){
  
  const checkedItemId = req.body.checkbox.trim();
  const listName = req.body.nameOfItemToDelete;

  if (listName==="Today"){
    Item.findOneAndDelete(checkedItemId)
      .then(function (item) {
        res.redirect("/")
        console.log("item is deleted")
      })
      .catch(function (err) {
        res.redirect("/")
        console.log("err while deleting")
      })
  }
  else{
    
    List.findOneAndUpdate({ name: listName }, { $pull: { items: { _id:  checkedItemId  } } })
      .then(function(foundlist){
        res.redirect("/"+listName)
      })
  }
  
})

字符串
请审查的代码,如果可能的话,然后帮助我

k4ymrczo

k4ymrczo1#

试试看:

List.findOneAndUpdate({ name: listName }, { item: { _id:  checkedItemId  } })
  .then(function(foundlist){
    res.redirect("/"+listName)
  })

字符串
根据您的注解,您需要确保您的List模式引用了docs中建议的Item模式子文档,如下所示:

const listSchema = new Schema({
   name: {
      type: String,
      required: true
   },
   items: [{
      type: mongoose.ObjectId,
      ref: 'Item'
   }]
});


这样,每个项目都是一个子文档,List包含与该列表相关的所有相关ObjectId的数组。这是处理两个文档之间引用的最佳方式。否则,你的items只是一个字符串数组,你将需要使用传统的搜索技术从数组中提取项目(通过索引选择,使用循环或array.find()等),这些项目没有像子文档那样优化。

相关问题