Mongodb удаляет объект из массива

#node.js #mongodb

#node.js #mongodb

Вопрос:

Я пытаюсь удалить объект из массива на основе имени (тикера) объекта. Другие также задавали этот вопрос, и я перепробовал многие из их решений, но я просто не могу заставить его работать. На самом деле он никогда не выполняет задачу по удалению чего-либо.

Вот моя схема:

 {
    _id : 1234 
    email : me@me.com 
    pass : password  
    stock : [ 
        {
        Ticker : TSLA 
        Market : Nasdaq 
        Notes : [ 
            "Buy at 700", 
            "Sell at 1000"
            ] 
        },
        {
        Ticker : AAPL 
        Market : Nasdaq 
        Notes : [ 
            "Buy at 110", 
            "Sell at 140"
            ] 
        },
    
    ]
}
 

Вот что у меня есть на данный момент, но я также попробовал несколько других комбинаций команд:

 router.post(`/watchlist/remove/:email/:pass/:stock`, (req, res) => {
    var email = req.params.email
    var pass = req.params.pass
    var tempStock = req.params.stock


    userModel.findOneAndUpdate({ email: email  }, { $pull : {'stock.Ticker' : tempStock} }   , (documents, err) => {
        if (err) {
            res.send(err);
        }
        else {
            res.send(documents)
        }
    })
})
 

Ответ №1:

Я думаю, это может помочь

 userModel.findOneAndUpdate({ email: email  }, { $pull:{stock:{Ticker : tempStock}}}, (documents, err) => {
        if (err) {
            res.send(err);
        }
        else {
            res.send(documents)
        }
    })
 

Также вы можете захотеть double-check , если вы получаете значение в tempStock переменной

Комментарии:

1. Раньше я не осознавал, что tempStock получает объект, а не просто строку. Спасибо за помощь, ваш код сработал, как только я разобрался с tempStock.

Ответ №2:

Ваш запрос должен быть таким:

 userModel.findOneAndUpdate({
    "email": email,
    "stock.Ticker": tempStock
}, {
    "$pull": {
        "stock": {
            "Ticker": tempStock
        }
    }
}, (documents, err) => {
    if (err) {
        res.send(err);
    }
    else {
        res.send(documents)
    }
})