从数组中删除一个元素,即在一个对象内

Posted

技术标签:

【中文标题】从数组中删除一个元素,即在一个对象内【英文标题】: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)
        )
) 
    User.findOne(_id : req.user.id) 只针对登录的人 定位后,使用 .task 访问任务数组 并使用 .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); ); 【参考方案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
        )
)

这成功删除了基于

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

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

【讨论】:

以上是关于从数组中删除一个元素,即在一个对象内的主要内容,如果未能解决你的问题,请参考以下文章

从对象 JSONB 中的数组中删除元素

将元素从一个对象添加/合并到数组内的另一个对象

使用拼接反应本机从数组中删除对象元素

js数组元素怎样删除最后一个元素

根据自定义对象属性从数组列表中删除元素

如何从数组中删除重复的数字?