簡體   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