【问题标题】:Deleting an element from an Array, that is inside an Object从数组中删除一个元素,即在一个对象内
【发布时间】:2021-08-18 08:26:30
【问题描述】:

在我的 To-Do 应用中,当登录用户完成一项任务时,我想将其从 MongoDB 数据库中清除。

这是我的架构的代码。

const user = new mongoose.Schema({
    username : String,
    password : String,
    task : [{
        text : String,
        day : String,
        reminder : Boolean,
    ]}
 })
    

For example,如果 Daryl 完成 text : "Gym" & day : "Feb 4th 5.30pm",我只想从 Daryl 的任务数组中删除 task[0]。

这是我使用 Mongoose 进行的尝试,

app.delete("/tasks", (req,res) => {
    User.findOne( {_id : req.user.id}).then((target) => {
        target.task.remove({text : req.body.text, day : req.body.day})
        })
}) 
  1. User.findOne({_id : req.user.id}) 只针对登录的人
  2. 定位后,使用 .task 访问任务数组
  3. 并使用 .remove 和过滤器,从数组中删除该条目

我有 console.logged() 所有变量,它与数据字段一致,但是条目没有被删除。我做错了什么?

【问题讨论】:

  • 您是否尝试在删除信息后保存更新的用户文档?
  • 我已经尝试在 target.task.remove() 之后添加 target.save() / target.task.save(),也没有任何变化。也尝试将 target.task.remove 更改为 target.task.pull
  • 也许试试这个。 User.updateOne( {_id : req.user.id }, { $pullAll: { text: req.body.text, day: req.body.day } } )
  • 仍然没有变化,但感谢您的帮助!
  • 在使用 save() 或 updateOne() 方法时是否收到任何错误消息?可能给updateOne()这样的方法加上回调,console.log(err)看看有没有问题。 User.updateOne({ _id: req.user.id }, { $pullAll: { text: req.body.text, day: req.body.day } }, function(err, res) { console.log(err); console.log(res); });

标签: javascript arrays express mongoose


【解决方案1】:

我设法解决了我的问题,希望这对其他人有帮助

app.delete("/tasks", (req, res) => {
    User.findByIdAndUpdate(req.user.id, {$pull: {"task": {text: req.body.text}}}, {safe: true, upsert: true},
        function (err, node) {
        // console.log here for debugging, if you want
        })
})

这成功删除了基于

的项目
  1. req.user.id
  2. "task" : {//无论你的条件是什么更严格}

我仍然不明白为什么我之前的尝试失败了,但至少这一次有效。

【讨论】:

    猜你喜欢
    • 2016-05-12
    • 2016-02-04
    • 2022-11-28
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多