繁体   English   中英

从嵌入式MongoDB文档中的数组中提取对象

[英]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)); });

要了解有关objectId的更多信息

感谢您的答复! 我对邮递员进行了更多测试,发现实际上我在问题中发布的代码确实有效。 让我失望的是,用户文档的响应仍然显示我刚刚删除的花朵,这使我认为它不起作用。

我仍然不知道为什么这样做,或者是否有办法获得更新后的用户的答复。 但是删除似乎按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM