#mongodb #express #mongoose #mongodb-query #mongoose-schema
Вопрос:
Это моя модель тележки:
const cartSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: "userSchema",
},
cart: [
{
product: { type: mongoose.Schema.Types.ObjectId, ref: "productSchema" },
amount: { type: Number, require: true, min: 0 },
price: { type: Number, min: 0 },
},
],
totalPrice: {
type: Number,
min: 0,
default: 0,
},
});
Я хотел бы проверить корзину.товар, прежде чем обновлять его, добавляет новый товар, если его еще нет, увеличьте сумму с помощью товара
Я пытаюсь таким образом сначала протестировать, но это не работает должным образом
router.put("/add-to-cart", authenticateToken, async (req, res) => {
try {
const productInfo = await productSchema.findById(req.body.id);
const filter = {
$and: [{ user: req.user }, { "cart.product": { $nin: [req.body.id] } }],
};
const options = { upsert: true, new: true, setDefaultsOnInsert: true };
const update = {
$push: {
cart: {
product: req.body.id,
amount: req.body.amount,
price: req.body.amount * productInfo.productPrice,
},
},
};
await cartSchema.findOneAndUpdate(filter, update, options);
return res.status(201).send({ status: true });
} catch (err) {
res.status(500).send({ message: err });
}
});
Ответ №1:
Я думаю, что ваш код работает нормально, возможно, это из-за вашего перехода идентификатора и объекта
db.collection.update({
$and: [
{
user: "1"
},
{
"cart.product": {
$nin: [
"1"
]
}
}
],
},
{
$push: {
cart: {
product: "1",
amount: 1,
price: 10
}
}
})