如果项目不存在,Mongodb 会在数组中插入一个项目

问题描述 投票:0回答:1

如果数组中不存在项目,我想在 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}
来推送项目,但没有任何效果。

c# mongodb nosql nosql-aggregation
1个回答
0
投票

为什么不在插入之前执行匹配或查找?对于要插入的项目,请尝试先找到包含 empId 的文档。然后,您可以执行第二次查询以查看该项目是否存在于

empTechnicalSkills
中,或者您可以仅检查代码是否存在。由您决定在哪里工作。然后,如果它不存在,则通过推送运行 mongo update 将其添加到数组中。

© www.soinside.com 2019 - 2024. All rights reserved.