假设我具有以下架构:
{
userId: docId,
skills: [
{
_id: SkillId,
endorsers: [
{
userId: idOfUser
}
]
}
]
}
我想要的是用户不应多次认可文档中的特定技能。首先应使用其docId
查找特定文档,并在其中使用skillId
查找特定技能,然后检查其endorsers
数组是否为空或特定用户尚未认可,然后推。
到目前为止,我尝试过的事情:
{
"userId": req.params.userId,
"skills": {
"$elemMatch": {
"skillId": ObjectId(req.params.skillId),
"$or": [
{"endorsers": []},
{"endorsers.userId":{$ne: endorser._id}}
]
}
}
},
{
"$push": { "skills.$[outer].endorsers": endorserData }
},
{
"arrayFilters": [
{ "outer.skillId": ObjectId(req.params.skillId) }
]
}
但是这不起作用,并且随着更新,我需要更新的结果。
答案 0 :(得分:0)
您可以使用猫鼬数组的addToSet
函数来保持其元素唯一。 https://mongoosejs.com/docs/api.html#mongoosearray_MongooseArray-addToSet