从嵌套数组中获取不存在于另一个嵌套数组中的元素

问题描述 投票:0回答:1

请帮忙! 我需要获取嵌套数组中不存在于另一个嵌套数组中的元素列表, 示例文档:

{
"_id": 123,
_a: [
  {
    aid: 10,
    _p: [
      {
        pid: 1,
        x: "C"
      },
      {
        pid: 2,
        x: "B"
      },
      {
        pid: 4,
        x: "A"
      }
    ],
    _d: [
      {
        pid: 2,
        x: "M"
      },
      {
        pid: 5,
        x: "M"
      },
      {
        pid: 7,
        x: "M"
      }
    ]
  }
 ]
}

预期产出:

   { aid:10 , pid:5}
   { aid:10 , pid:7} 

Task1:我需要找到所有不存在于_a[]._p[]中的_a[]._d[].pid

Task2:我需要从 _a[]._d[] 中删除所有对象,其中 pid 在 _a[]._p[] 中不存在

游乐场

arrays mongodb mongodb-query aggregation-framework
1个回答
0
投票

使用$setDifference

db.collection.aggregate([
  {
    $unwind: "$_a"
  },
  {
    $project: {
      aid: "$_a.aid",
      pid: {
        $setDifference: [
          "$_a._d",
          "$_a._p"
        ]
      }
    }
  },
  {
    $unwind: "$pid"
  },
  {
    $project: {
      aid: 1,
      pid: "$pid.pid"
    }
  }
])

mongo游乐场

© www.soinside.com 2019 - 2024. All rights reserved.