javascript - 从数组中删除一个元素,即在一个对象内
问题描述
在我的待办事项应用程序中,当登录用户完成任务时,我想将其从 MongoDB 数据库中清除。
这是我的架构的代码。
const user = new mongoose.Schema({
username : String,
password : String,
task : [{
text : String,
day : String,
reminder : Boolean,
]}
})
例如,如果 Daryl 完成了text : "Gym" & day : "Feb 4th 5.30pm",我只想从 Daryl 的任务数组中删除任务 [0]。
这是我使用猫鼬这样做的尝试,
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() 所有变量,它与数据字段相符,但是条目没有被删除。我究竟做错了什么?
解决方案
我设法解决了我的问题,希望这对其他人有帮助
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
})
})
这成功地删除了基于
- 请求.user.id
- "task" : {//无论你的条件更严格}
我仍然不明白为什么我之前的尝试失败了,但至少这个有效。
推荐阅读
- android - 带有 Google 地图的 Android 版 Facebook Messenger
- javascript - 带有复选框的控件元素显示
- javascript - 检查登录状态,Google oAuth,没有呈现按钮
- python - Python 中基于 yield 的协程与带有 @asyncio.coroutine 和 @types.coroutine 装饰器的协程有何不同?
- ruby-on-rails - 在仅 Rails 6 API 的应用程序中从 JBuilder 视图呈现 ActiveStorage blob
- azure-cosmosdb - 您如何在 mongo API Cosmos DB 中进行更改提要监视现在更改提要处理已被禁用且 Azure 函数不存在
- wix - 更改由 WiX 设置的注册表项
- python - opencv-python 有没有好的备忘单?
- mysql - 如何根据与另一个表匹配的数据将表列设置为特定值
- javascript - 从 Electron Container IPC Channel 接收数据时,Change Detection 会间歇性工作