如果数组中不存在项目,我想在 mongodb 集合的数组中插入一个项目。
例如集合:
{
empId :100,
empName: 'John',
empTechnicalSkills: [
{ empid: 100, id: 1, value: 'mongodb' },
{ empid: 100, id: 2, value: '.net' }
]
}
如果该技能不存在并且
empid
存在我想更新/推送新技能
例如
如果我按下
{ empid: 100, id:3 , value: 'sql server' }
,它应该在数组中添加一个新项目
如果我按下
{ empid: 100, id:1 , value: 'sql server' }
,它应该被忽略,因为id=1
已经存在
如果我按下
{ empid: 101, id:1 , value: 'sql server' }
,它应该创建一个新文档并添加一项技能(如更新插入)
{
empId: 101,
empTechnicalSkills: [
{ empid: 101, id: 1, value: 'sql server' }
]
}
有人可以帮助我了解如何实现这一目标吗?我正在使用 C#。
我尝试了不同的方法来聚合管道和更新,通过匹配
{empId and empTechnicalSkills.id $ne provided id}
来推送项目,但没有任何效果。
为什么不在插入之前执行匹配或查找?对于要插入的项目,请尝试先找到包含 empId 的文档。然后,您可以执行第二次查询以查看该项目是否存在于
empTechnicalSkills
中,或者您可以仅检查代码是否存在。由您决定在哪里工作。然后,如果它不存在,则通过推送运行 mongo update 将其添加到数组中。