[英]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.