从数组中删除一个元素,即在一个对象内
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" : //无论你的条件是什么更严格
我仍然不明白为什么我之前的尝试失败了,但至少这一次有效。
【讨论】:
以上是关于从数组中删除一个元素,即在一个对象内的主要内容,如果未能解决你的问题,请参考以下文章