В случае, если ваши данные не заполнены (общий доступ к do c сохраняется в одной коллекции):
Насколько я помню, прямого пути нет сделай это. Сначала вы должны получить do c, а затем обновить его, как хотите. Элементы вложены, поэтому у каждого из них также будет свой идентификатор:
const doc = await Model.findById(docId); // or find or findOne
const item = doc.shoppingCart.items.id(itemId);
item.quantity = 10;
await doc.save();
Если вы хотите удалить вложенный документ по заголовку, но не имеете itemId, вам придется искать элементы и находить id этого предмета, получите подпункт do c, как и раньше, do item.remove()
, а затем doc.save()
:
const items = doc.shoppingCart[0].items;
const idx = items.findIndex((item) => item.title === 'product123');
const item = items.id(items[idx]._id);
item.remove();
doc.save();
Лучше поделиться тем, что вы уже сделали. Затем также поделитесь моделью, корзина покупок отображается в виде массива, что, я думаю, не имеет смысла.
Кстати, у mon goose есть отличная документация, которая является вашим хорошим другом: Субдокумент документация