【发布时间】:2021-09-29 15:38:46
【问题描述】:
如果员工id的姓名和喜好不在数组中,则需要添加新记录,否则需要添加新记录。
例如
{
name: 'AA',
likes: [{eid:100},{eid:101}]
},
{
name:'BB',
likes:[{eid:100},{eid:102}]
}
从 API 调用我传递以下值
条件一
{name:'AA', eid: '101'} => 这里name "AA" 和eid 101 的值都存在于记录中,所以我不想添加新记录
条件2
{name:'AA', eid: '105'} => 这里需要添加同名的新记录,所以输出如下所示
{
name: 'AA',
likes: [{eid:100},{eid:101},{eid:105}]
},
条件 3
{name:'CC', eid: '101'} => 然后应该添加新记录,所以最终输出是
{
name: 'AA',
likes: [{eid:100},{eid:101}, {eid:105}]
},
{
name:'BB',
likes:[{eid:100},{eid:102}]
},
{
name:'CC',
likes:[{eid:101}]
}
我的代码如下
postData(data) {
const newLikeDbDto: LikesDbDto = {
eid: data.eid
};
await this.feedbackModel.findOneAndUpdate(
{
$and:
[
{
$or:
[
{ name: data.name, 'likes.eid' :{ $nin: [ data.eid ] } }
]
},
{
$or:
[
{ name: data.name }
]
}
]
},
{$push: {likes: newLikeDbDto} },
{new: true, upsert: true})
.exec()
}
我不是猫鼬方面的专家,所以请帮助我如何实现这三个条件。
谢谢
【问题讨论】:
-
你的输出错误在哪里?你应该使用 $set,而不是 push
-
我需要将数据推送到数组中
-
那就不要用find和update了,find更新跟find一样,然后更新,你应该find并推送
标签: node.js mongodb mongoose mongodb-query nestjs