我想在mongodb集合中插入一个项目,如果项目不存在于数组中。
e。g系列:
{
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' }
,它应该创建一个新的文档,并添加一个技能(如upsert)
{
empId :101,
empTechnicalSkills: [ { empid: 101, id:1 , value: 'sql server' } ]
}
有人可以帮助我了解如何实现这一点。我正在使用c#。
我尝试了不同的东西聚合管道与更新,通过匹配{empId and empTechnicalSkills.id $ne provided id}
推送项目,但没有工作。
为什么不在插入之前执行匹配或查找呢?对于要插入的项,尝试先查找包含empId的文档。然后,您可以进行第二次查询,看看项目是否存在于empTechnicalSkills
中,或者您可以检查您的代码,如果它存在。你想在哪里工作由你决定。然后,如果它不存在,运行mongo更新与push将其添加到数组。