node.js - 如何在 Mongoose 中用他的索引号更新数组
问题描述
我的用户模型有一个装有物品(数组)的购物车。我想检查他的购物车中的每件商品是否有足够的库存,如果没有,将购物车中的商品数量更新为可用库存(填充了 productId)。
}
})
好吧,'cart.items[i].quantity' 太容易了,它不起作用:D
用户:[![在此处输入图像描述][1]][1]
产品:[![在此处输入图片描述][2]][2]
解决方案
这是您提供的代码。
user.cart.items.forEach((item, i) => {
if (item.quantity > item.productId.stock) {
User.findByIdAndUpdate(user._id, {'cart.items[i].quantity': item.productId.stock})
}
})
从上面的代码我可以看到我们有productId
要更新的项目。那么为什么在我们有索引的时候使用索引productId
呢?无论如何,我已经根据您的屏幕截图创建了一个示例文档,并创建了一个更新quantity
基于productId
. 您可以转到 mongo playground 链接并运行查询并根据您的需要进行调整。
试试这个查询 -
db.collection.update({
_id: 1
},
{
"$set": {
"cart.items.$[element].quantity": 2 /**where 2=item.productId.stock*/
}
},
{
arrayFilters: [
{
"element.productId": 100
}
]
})
这里是Mongo游乐场
编辑 :
如果你仍然想用 index.
db.collection.update({
_id: 1
},
{
"$set": {
"cart.items.1.quantity": 2/**where 1 is index and 2=item.productId.stock*/
}
})
这里是游乐场
推荐阅读
- python - Python lambda 闭包奇怪?
- python - 从一个较大的 ndarray 中减去一个较小的 ndarray 然后使用剩下的将较小的 ndarray 填充到较大的 ndarray 的大小
- java - Java 线程 - 使函数与线程的多个返回值保持同步
- linux - 为什么nmap ping扫描不需要root权限
- nginx - 从 nginx 提供 json 文件
- sharepoint - REST API 删除列表项 - 使用此代码
- python - 资源 localhost/total/N10tensorflow3VarE 不存在
- javascript - 如何从具有相同键的数组创建嵌套对象(javascript)
- java - 将第 N 个(用户输入)数字转换为大写,其余为小写
- javascript - 是否可以为获取构建通用函数?