[英]Pull objects from array in embedded MongoDB document
我一直無法找到一種從嵌入式mongoDB文檔中的數組中刪除對象的方法。 我的架構包含一個用戶和一個花對象列表。 看起來像這樣:
const UserSchema = new Schema({
name : {
type : String,
required : true
},
flowers : [
{
name : {
type : String,
required : true
},
water_freq : {
type : Number,
required : true
}
}
]
});
我設法像這樣添加花對象:
router.post('/:id/flowers/add', (req, res) => {
const { name, water_freq } = req.body;
User.findByIdAndUpdate(
req.params.id,
{
$push : {
flowers : { name, water_freq }
}
},
{ new: true }
).then((user) => res.json(user));
});
我想通過用戶ID從用戶中刪除花朵,但無法使其正常工作。 下面的代碼是我無法正常工作的嘗試。
router.delete('/:id/flowers/delete/:flowerid', (req, res) => {
User.findByIdAndUpdate(req.params.id, {
$pull : {
flowers : { _id: req.params.flowerid }
}
}).then((user) => res.json(user));
});
如果有人可以幫助我解決這個問題,我將不勝感激。
一個可能的原因是,在您的查詢{$pul: xxxx}
,MongoDB期望在給定字符串時為每個花條目自動生成的BSON類型對象ID。 因此,您可能需要在執行查詢之前將其轉換為正確的類型:
嘗試:
router.delete('/:id/flowers/delete/:flowerid', (req, res) => {
User.findByIdAndUpdate(req.params.id, {
$pull : {
flowers : { _id: ObjectId(req.params.flowerid) }
}
}).then((user) => res.json(user)); });
感謝您的答復! 我對郵遞員進行了更多測試,發現實際上我在問題中發布的代碼確實有效。 讓我失望的是,用戶文檔的響應仍然顯示我剛剛刪除的花朵,這使我認為它不起作用。
我仍然不知道為什么這樣做,或者是否有辦法獲得更新后的用戶的答復。 但是刪除似乎按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.