猫鼬如何有条件推入嵌套数组

时间:2018-12-20 07:01:14

标签: node.js mongodb mongoose

假设我具有以下架构:

{
  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) }
      ]
    }

但是这不起作用,并且随着更新,我需要更新的结果。

1 个答案:

答案 0 :(得分:0)

您可以使用猫鼬数组的addToSet函数来保持其元素唯一。 https://mongoosejs.com/docs/api.html#mongoosearray_MongooseArray-addToSet