gpt4 book ai didi

node.js - MongoDB - 如何更新/推送数组中的对象,该数组由另一个对象包含,而该对象又由另一个数组包含

转载 作者:太空宇宙 更新时间:2023-11-04 01:18:17 24 4
gpt4 key购买 nike

这是一个代码片段,

{
"summary":[
{
"chem_id":"5e18c858c88e1e2328771593",
"chem_sale": [
{
"product_id": "5e3c5042ac7e0d67c3b5ae6f",
"product_sale": 8900
},
{
"product_id": "5e3c5029ac7e0d67c3b5ae6e",
"product_sale": 6500
}
]
},
{
"chem_id":"5e1b1cb5f3123a3a74f014f5",
"chem_sale": [
{
"product_id": "5e3c5042ac7e0d67c3b5ae6f",
"product_sale": 2900
},
{
"product_id": "5e3c5029ac7e0d67c3b5ae6e",
"product_sale": 3500
}
]
}
]
}

如果新产品对象的 id 是唯一的并且如何将其添加到 chem_sale 数组中如何更新product_sale?

我尝试过将新产品对象添加到摘要数组

 let saleRecord = await saleRecordModel.findOneAndUpdate(
{ emp_id: req.params.id },
{ $addToSet: { summary: req.body.summary } },
{ new: true, upsert: false }
);

我使用的是 Mongoose 版本5.9.0但我得到了重复的结果。请帮助我。

最佳答案

您需要的是arrayFilters选项。 https://docs.mongodb.com/manual/reference/method/db.collection.update/index.html#update-array-filters

查看标识符 $[<identifier>] 的更多示例 https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#up.S[%3Cidentifier%3E]

db.saleRecord.update(
{ emp_id: '<EMP_ID>' },
{ $set: {'summary.$[].chem_sale.$[chemSaleElement].product_sale': 1000 }},
{ arrayFilters: [{ 'chemSaleElement.product_id': '5e3c5029ac7e0d67c3b5ae6e' }] }
)

关于node.js - MongoDB - 如何更新/推送数组中的对象,该数组由另一个对象包含,而该对象又由另一个数组包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60227245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com