Node.js MongoDB-如何更新/推送由另一个对象包含的数组中的对象,而另一个对象又由另一个数组包含
下面是一段代码片段Node.js MongoDB-如何更新/推送由另一个对象包含的数组中的对象,而另一个对象又由另一个数组包含,node.js,database,mongodb,Node.js,Database,Mongodb,下面是一段代码片段 { "summary":[ { "chem_id":"5e18c858c88e1e2328771593", "chem_sale": [ { "product_id": "5e3c5042ac7e0d67c3b5ae6f", "product_sale": 8900
{
"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是唯一的且
如何更新产品销售
我尝试过将新产品对象添加到摘要数组中
let saleRecord = await saleRecordModel.findOneAndUpdate(
{ emp_id: req.params.id },
{ $addToSet: { summary: req.body.summary } },
{ new: true, upsert: false }
);
我使用的是猫鼬版本5.9.0
但我得到了重复的结果。请帮助我。您需要的是
阵列过滤器
选项
有关标识符$[]
db.saleRecord.update(
{emp_id:''},
{$set:{'summary.$[].chem_sale.$[chemsalelement].product_sale:1000},
{arrayFilters:[{'ChemsalElement.product_id':'5e3c5029ac7e0d67c3b5ae6e'}]
)
这里需要的是阵列过滤器
选项
有关标识符$[]
db.saleRecord.update(
{emp_id:''},
{$set:{'summary.$[].chem_sale.$[chemsalelement].product_sale:1000},
{arrayFilters:[{'ChemsalElement.product_id':'5e3c5029ac7e0d67c3b5ae6e'}]
)
emp\u id来自哪里?您能否提供saleRecordModel集合中对象的示例?@Jérôme saleRecord模型集合conatins emp_id,(ObjectID)以及上述摘要数组OK。然后您想在chem_sale
中推送一个新对象以获得特定的chem_id
?也,您想在汇总的所有条目中为给定的product\u id
更新product\u-sale
吗?如果product\u-id
与chem\u-sale
数组的给定product\u-id
匹配,则应更新@Jérômeproduct\u-sale
。@Yashwantsomsomayajula:如果您能提供您的请求和期望,那就很容易了输出(转换后的文档)…您的MongoDB版本是什么?emp_id来自哪里?您能否提供saleRecordModel集合中对象的示例?@Jérôme saleRecord模型集合conatins emp_id,(ObjectID)以及上述摘要数组OK。然后您想在chem_sale
中推送一个新对象以获得特定的chem_id
?也,您想在汇总的所有条目中为给定的product\u id
更新product\u-sale
吗?如果product\u-id
与chem\u-sale
数组的给定product\u-id
匹配,则应更新@Jérômeproduct\u-sale
。@Yashwantsomsomayajula:如果您能提供您的请求和期望,那就很容易了输出(转换文档)…您的MongoDB版本是什么?
db.saleRecord.update(
{ emp_id: '<EMP_ID>' },
{ $set: {'summary.$[].chem_sale.$[chemSaleElement].product_sale': 1000 }},
{ arrayFilters: [{ 'chemSaleElement.product_id': '5e3c5029ac7e0d67c3b5ae6e' }] }
)