У меня есть такая схема mongo.
{
userID:19202,
products:[ { id:020, name:'first' }]
}
Я хочу извлекать элементы из массива товаров на основе идентификатора. Я использовал следующую команду. хотя он не дал никаких ошибок, он также не удалял элементы из массива.
userCart.updateOne(
{ userID:userID},
{ $pull: { products: { id:id } } }
)
.then((data) =>
{
if (data)
{
//data is {
"n": 1,
"nModified": 0,
"ok": 1
}
return res.json({
status:true,
message:"cart updated"
})
}
})





Демо - https://mongoplayground.net/p/mh6fXN21vyR
Убедитесь, что id и products.id того же типа, что и в вашем документе в базе данных. В качестве образца оба должны быть числами.
если они оба числа
db.collection.update({
userID: 19202
},
{
$pull: {
"products": { id: 20 }
}
})
Здесь не работает - https://mongoplayground.net/p/3zhv8yoH2o9 при "products": { id: "20" }. products.id - это строка в запросе mongo и в базе данных по номеру, поэтому не совпадают.
@Pranaykumar в этом случае убедитесь, что вы передаете строки в запросе на обновление, а не числа из кода node.js.
Попробуй это:
db.userCart.update(
{ userID:userID },
{ $pull: { items: { id: 020 } } },
false, // Upsert
true, // Multi
);
id и product.id имеют строковый тип