node.js - 使用nodejs更新mongodb中的多个不同数组对象元素
问题描述
mongodb集合:
"_id": ObjectId("5e2ac528e9d99f3074f31de7"),
"publications": [
{
"_id": ObjectId("5e2ac528e9d99f3074f31de8"),
"name": "Times of India",
"productCode": "TCE1",
"tradeCopies": 40
},
{
"_id": ObjectId("5e2ac528e9d99f3074f31de9"),
"publicationName": "Economic Times",
"productCode": "ECE1",
"tradeCopies": 100
}
],
"orderCreatedBy": ObjectId("5e2977e1cc1208c65c00648b"),
"submittedTo": ObjectId("5e2555363405363bc4bf86c2"),
Nodejs 代码
我会得到多个“productCode”,如“TCE1”、“ECE1”等,我需要根据它们的 productCodes 一次性更新所有对象数组元素的 tradeCopies
这是我尝试过的
exports.editOrder = async (req, res, next) => {
const { orderId, dealerId, productCode, tradeCopies } = req.body;
try{
const orders: await Order.updateOne(
{ _id: orderId,
submittedTo: dealerId,
"publications.productCode": productCode},
{$set:{"publications.$.tradeCopies":50}}
)
res.status(200).json({
orders,
message: "order submitted"
});
} catch (error) {
res.send(error);
}
};
关注点
1-此查询仅根据匹配的 productCode 更新 1 个数组对象元素我希望根据它们的 productCodes 一次性更新所有数组对象的所有 tradeCopies
2-上述查询仅在 mongo Shell 中有效,不在 nodejs 驱动程序中,每当我在 nodejs 查询中删除双引号时 vscode 显示可能会出现错误
解决方案
您想使用arrayFilters。
const orders: await Order.updateOne(
{ _id: orderId,
submittedTo: dealerId,
"publications.productCode": productCode
},
{ $set: { "publications.$[element].tradeCopies":50 } },
{ arrayFilters: [ { "element.productCode": productCode } ] }
)
我不确定删除双引号是什么意思,但此代码段与 nodejs 驱动程序兼容。
推荐阅读
- java - hibernate 5.4.12.Final“注解类型NamedQuery的属性cacheable未定义”,不支持cacheable = true吗?
- python - 如何舍入预测
- amazon-web-services - 运行权限命令 AWS 后给出 503 错误
- python - Google Colab 从 Kaggle 导入数据库
- bash - 如何从基因列表中选择多个 fasta 序列
- javascript - 如何在反应后方法调用中传递带有表示数字数据类型的值的json属性
- activemq - 主题的 ActiveMQ 单次出列
- c - Archive has no index; run ranlib to add one (when linking with a .a containing a MachO64 object file on Linux)
- python - 如何使用Python返回整数列表的所有子集的列表?
- python - Python主进程/线程未在多处理中终止