如果员工id的姓名和喜好不在数组中,我需要添加新记录,否则需要添加新记录。
例如
{
name: 'AA',
likes: [{eid:100},{eid:101}]
},
{
name:'BB',
likes:[{eid:100},{eid:102}]
}
来自 API 调用,我正在传递以下值
条件 1
{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()
}
我不是猫鼬的专家,所以请帮助我如何实现这三个条件。
谢谢
答案 0 :(得分:0)
试试这个解决方案:
架构
{
name: { type: String },
likes: { type: [ { _id: false, eid: { type: Number } } ], default: [] }
}
收集样本记录
[
{
name: 'AA',
likes: [{eid:100},{eid:101}]
},
{
name:'BB',
likes:[{eid:100},{eid:102}]
}
]
条件 1
await FeedbackModel.findOneAndUpdate(
{ $or: [ { name:'AA', 'likes.eid': 101 }, { name: 'AA' } ] },
{ $set: { name: 'AA' }, $addToSet: { likes: { eid: 101 } } },
{ upsert: true, new: true }
)
条件 2
await FeedbackModel.findOneAndUpdate(
{ $or: [ { name:'AA', 'likes.eid': 105 }, { name: 'AA' } ] },
{ $set: { name: 'AA' }, $addToSet: { likes: { eid: 105 } } },
{ upsert: true, new: true }
)
条件 3
await FeedbackModel.findOneAndUpdate(
{ $or: [ { name:'CC', 'likes.eid': 101 }, { name: 'CC' } ] },
{ $set: { name: 'CC' }, $addToSet: { likes: { eid: 101 } } },
{ upsert: true, new: true }
)