Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何更新嵌套对象中的数据_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 如何更新嵌套对象中的数据

Javascript 如何更新嵌套对象中的数据,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我想使用mongoose更新嵌套对象中的数据。我的模型是: { _id:123, 购物车:[{ _身份证号码:321, 总价:110, 物品计数:1, 项目:[{ 标题:“产品123”, 数量:2 }] }] } 我想更新shoppingCart的商品数量。我阅读了文档,但不明白如何更新数量?您希望这样使用: 如果您的数据未填充(您共享的文档保存在一个集合中): 就我所记得的,没有直接的方法可以做到这一点。您应该先获取文档,然后根据需要进行更新。项目是嵌套的,因此每个项目都有一个id: con

我想使用mongoose更新嵌套对象中的数据。我的模型是:

{
_id:123,
购物车:[{
_身份证号码:321,
总价:110,
物品计数:1,
项目:[{
标题:“产品123”,
数量:2
}]
}]
}
我想更新shoppingCart的商品数量。我阅读了文档,但不明白如何更新数量?

您希望这样使用:


如果您的数据未填充(您共享的文档保存在一个集合中):

就我所记得的,没有直接的方法可以做到这一点。您应该先获取文档,然后根据需要进行更新。项目是嵌套的,因此每个项目都有一个id:

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,像以前一样获取子文档,执行
item.remove()
,然后执行
doc.save()

最好分享你迄今为止所做的事情。然后也分享模型,购物车显示为一个数组,我认为这没有意义

顺便说一句,mongoose有很好的文档,是您的好朋友:

暂时不考虑猫鼬,改变数量可以像
obj.shoppingCart[0]。物品[0]。数量=3。不过,这看起来像是一个填充的db结果,所以我认为这不是解决问题的方法。如果我想删除一个项目,该怎么办。例如,如果我想删除一个名为“product123”的产品,我应该编写什么代码?
const doc = await Model.findById(docId); // or find or findOne
const item = doc.shoppingCart.items.id(itemId);
item.quantity = 10;
await 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();