[英]How to delete subdocument using mongoose?
我有一個具有以下架構的 mongoDB:
const jobSchema = new mongoose.Schema({
companyTitle: String,
status: String,
companyURL: String,
jobTitle: String,
jobURL: String,
jobDescription: String,
contactName: String,
contactRole: String,
contactPhone: String,
contactEmail: String,
tasks: [Task.schema]
})
const taskSchema = new mongoose.Schema({
taskItem: String,
isCompleted: Boolean
})
當用戶單擊一個按鈕時,job._id 和 task._id 被發送到我的服務器,該特定任務應該從數據庫中刪除。 目前,該路由刪除父級(作業)而不是子級(任務)。 任何想法如何定位任務? 提前致謝!
應用程序.js
app.delete('/tasks/:jobId/:taskId', (req, res) => {
const jobId = req.params.jobId
const taskId = req.params.taskId
Job.findOneAndDelete(
{'_id': jobId, 'tasks._id': taskId},
function (error, doc) {
if (error) {
console.log(error)
} else {
console.log(doc)
}
}
)
})
您應該使用findOneAndUpdate
而不是findOneAndDelete
。 你可以像這樣重構你的代碼:
app.delete('/tasks/:jobId/:taskId', async (req, res) => {
const jobId = req.params.jobId
const taskId = req.params.taskId
Job.findOneAndUpdate(
{"_id": jobId },
{"$pull": {"tasks": {"_id": taskId}}},
{new:true},
function (error, doc) {
if (error) {
console.log(error)
} else {
console.log(doc)
}
}
);
})
您的代碼刪除了父級,因為 Mongo 刪除了與查詢匹配的文檔。 在這種情況下,您的“父級”匹配查詢,因為它有一個具有給定_id
的子級。
通過查詢findOneAndDelete({'_id': jobId, 'tasks._id': taskId})
你告訴 mongo:“刪除一個文檔,其中_id
是jobId
並且一些_id
到tasks
數組是taskId
”。
您必須在更新操作中使用$pull
:
就像是
Job.updateOne(
{"_id": jobId},
{
"$pull": {
"tasks":{
"_id": taskId
}
}
}
)
請注意,更新有兩個對象:第一個是要更新的 object,第二個是要執行的“操作”。 在這種情況下,使用給定的_id
拉取子任務。
此查詢告訴 mongo:使用給定的_id
搜索一個 object 並刪除_id
為taskId
的tasks
子文檔。
這里的例子
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.