#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)
}
})