我正在努力讓子檔案從父檔案中移除。 我正在使用Mongoose findOneAndUpdate。
unitRouter.delete('/:id/contracts/:cid', async(req, res)=> {
Unit.findOneAndUpdate(
{ id: req.params.id },
{$pull: {contracts: { id: req.params.cid }}},
function(err, data){
console.log(err, data)。
});
res.redirect(`/units/${req.params.id}`) 。
});
模式如下:
const unitSchema = new mongoose.Schema({
address: {
type: String,
required: true。
}
contracts: [{type: mongoose.Schema. Types.ObjectId, ref。'Contract'}] 。
});
而且它并沒有從串列中洗掉,也沒有從合同集合中洗掉。 我已經檢查了類似的主題,但沒有得到作業。我錯過了什么?
uj5u.com熱心網友回復:
首先,你的模式與你的查詢不匹配。
- 你的模式沒有任何
id。你是指默認創建的_id嗎? contracts欄位是一個ObjectId的陣列,而不是一個像{ id: XXX }
因此,從模式開始,你可以有一個類似于這樣的集合:
[
{
"contracts": [
"5a934e000102030405000000",
"5a934e000102030405000001",
"5a934e000102030405000002"
],
"_id"。"613bd938774f3b0fa8f9c1ce",
"地址": "1"。
},
{
"合同": [
"5a934e000102030405000000",
"5a934e000102030405000001",
"5a934e000102030405000002"
],
"_id"。"613bd938774f3b0fa8f9c1cf",
"地址": "2".
}
]
有了這個集合(與你的模式相匹配),你需要進行如下查詢:
Unit.updateOne({
"_id": req.params.id。
},
{
"$pull"/span>: {
"合同": req.params.cid。
}
})
示例這里.
。另外,反過來說,你的查詢是可以的,但是你的模式不可以。那么你需要一個類似于這樣的模式:
new mongoose.Schema(
{
id:{
type: mongoose.Schema.Types.ObjectId,
required: true。
},
address: {
type: String,
required: true。
},
contracts: [{
id:{
type: mongoose.Schema.Types.ObjectId。
ref。'Contract'。
}
}]
});
示例 這里
順便說一下,注意不要把id和_id混淆。默認情況下,創建的是_id欄位。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/319854.html
標籤:
上一篇:來自RESTfulAPI的post請求給出了UnhandledPromiseRejectionWarning。驗證錯誤。產品驗證失敗:錯誤
