将数组对象添加到与ID匹配的另一个数组中

时间:2020-06-25 09:07:18

标签: arrays mongodb aggregation-framework

我正在使用Mongo 4.2。我有一个包含两个数组的文档集合:studentMcqs和mcq:

studentMcqs:[0:{

cudacodec

}, 1:{....}]

mcq:[0:{

    "id": 2024,
    "answer": "C",
    "bookMarked": false,
    "mcqId": 408041

},1:{....}]

我想将所有mcq.id与studentMcqs.mcqId进行比较,如果匹配,则将mcqSubject对象添加到studentMcqs数组中。 想通过聚合管道做到这一点

1 个答案:

答案 0 :(得分:0)

您可以做这样的事情

  db.collection.aggregate([
  {
    $unwind: "$studentMcqs"
  },
  {
    $unwind: "$mcqs"
  },
  {
    $project: {
      mcqs: 1,
      studentMcqs: 1,
      comp_value: {
        $cmp: [
          "$mcqs.id",
          "$studentMcqs.mcqId"
        ]
      }
    }
  },
  {
    $match: {
      comp_value: {
        $eq: 0
      }
    }
  },
  {
    $project: {
      studentMcqs: {
        answer: 1,
        bookMarked: 1,
        id: 1,
        mcqId: 1,
        mcqSubject: "$mcqs.mcqSubject"
      }
    }
  },
  {
    $group: {
      _id: "$_id",
      studentMcqs: {
        $push: "$studentMcqs"
      }
    }
  }
])

您可以查看工作示例here