#node.js #mongodb #mongoose
#node.js #mongodb #мангуст
Вопрос:
Я новичок в серверной части и пытаюсь создать корзину покупок с помощью NodeJS и MongoDB. Я много чего перепробовал, но не могу обновить поле количества продукта.
Это схема
const mongoose = require('mongoose');
const itemsSchema = mongoose.Schema(
{
prodId: String,
name: String,
price: Number,
qty: {
type: Number,
default: 1,
min: 1,
},
},
{
timestamps: true,
}
);
const cartSchema = mongoose.Schema(
{
total: {
type: Number,
},
products: [itemsSchema],
},
{
timestamps: true,
}
);
const Cart = mongoose.model('carts', cartSchema);
module.exports = Cart;
Это контроллер
const Cart = require('../models/cart');
exports.postItemToCart = async (req, res) => {
const { prodId } = req.body;
Cart.updateOne(
{ 'products.prodId': prodId },
{ $inc: { 'products.qty': 1 } }
);
return res.status(200).send(Cart);
};
Это корзина
[
{
_id: '60062c7a9b0bfd350b3eb755',
__v: 3,
createdAt: '2021-01-19T00:48:58.006Z',
products: [
{
qty: 1,
_id: '6006333bd00fe96af648d308',
prodId: '1111',
name: 'Product One',
price: 24.22,
updatedAt: '2021-01-19T01:17:47.034Z',
createdAt: '2021-01-19T01:17:47.034Z',
},
{
qty: 1,
_id: '600634337f3eba6b451a26e5',
prodId: '2222',
name: 'Product Two',
price: 24.22,
createdAt: '2021-01-19T01:21:55.417Z',
updatedAt: '2021-01-19T01:21:55.417Z',
},
],
total: 48.44,
updatedAt: '2021-01-21T02:19:49.955Z',
},
];
Я могу изменять и обновлять в консоли документации Mongoose, но я не могу применить тот же код к своему проекту.
Пожалуйста, помогите 🙂
Ответ №1:
positional operator
поможет вам обновить первый соответствующий элемент массива.
Cart.updateOne(
{ 'products.prodId': prodId },
{ $inc: { 'products.$.qty': 1 } } //note dollar sign
);
Комментарии:
1. Привет, Гиббс! Я пытался, но это не работает. У меня есть эта ошибка» (узел: 6842) Необработанное предупреждение promiserejectionwarning: ошибка типа [ERR_INVALID_ARG_TYPE]: Первый аргумент должен иметь тип string или экземпляр Buffer, ArrayBuffer или Array или объект, подобный массиву. Получена функциональная модель [0] в функции. из (buffer.js:331:9)
2. Наконец-то я смог решить свою проблему. Я использовал последнюю версию Mongoose, я понизил рейтинг до «mongoose»: «5.2.8», и теперь все мои проблемы исчезли! Спасибо @gibbs!!