在嵌套数组中查找具有重复元素的 mongo 个文档的 ID

Finding ID of mongo documents with duplicated elements in nested array

我想从集合中提取文档的 ID,这些文档具有嵌套在“streetModel”数组中的“drives”对象的重复 ID。
这是我的典型文档:

  {
    "_id": {
        "$oid": "61375bec4fa522001b608568"
    },
    "name": "Streetz",
    "statusDetail": {},
    "streetModel": {
        "_id": "3.7389-51.0566",
        "name": "Kosheen - Darude - Swedish - Trynidad - Maui",
        "countryCode": "DEN",
        "drives": [{
            "_id": -903500698,
            "direction": "WEST"
            }, {
            "_id": 1915399546,
            "direction": "EAST"
            }, {
            "_id": 1294835467,
            "direction": "NORTH"
            }, {
            "_id": 1248969937,
            "direction": "EAST"
            }, {
            "_id": 1248969937,
            "direction": "EAST"
            }, {
            "_id": 1492411786,
            "direction": "SOUTH"
                }]
    },
    "createdAt": {
            "$date": "2021-09-07T12:32:44.238Z"
        }
    }

在这个 ID 为 61375bec4fa522001b608568 的特定文档中,在“streetModel”的“drives”数组中,我得到了 ID 为 1248969937 的重复驱动器对象。
我想创建一个对数据库的查询,该查询将 return 存在此类问题的所有文档的 ID(重复的“驱动器”)。
现在我得到了这个:

db.streets.aggregate([
  {
    $unwind: "$streetModel"
  },
  {
    $unwind: "$drives"
  },
  {
    $group: {
      _id: {
        id: "$_id"
      },
      sum: {
        $sum: 1
      },

    }
  },
  {
    $match: {
      sum: {
        $gt: 1
      }
    }
  },
  {
    $project: {
      _id: "$_id._id",
      duplicates: {
        drives: "$_id"
      }
    }
  }
])

但事实并非如此。
我尝试了很多方法来重写这个查询,但不幸的是它不起作用。

查询

  • 放松
  • 按文档 ID + 司机 ID 分组
  • 只保留相同驱动器 ID 超过一次的那些
  • replace-root是为了让文档更好看,你也可以用$project代替
  • 如果你需要更多的阶段,我想你可以添加它,例如获取有这个问题的文件项目只有 docid 的

Test code here

db.collection.aggregate([
  {
    "$unwind": {
      "path": "$streetModel.drives"
    }
  },
  {
    "$group": {
      "_id": {
        "docid": "$_id",
        "driveid": "$streetModel.drives._id"
      },
      "duplicates": {
        "$push": "$streetModel.drives.direction"
      }
    }
  },
  {
    "$match": {
      "$expr": {
        "$gt": [
          {
            "$size": "$duplicates"
          },
          1
        ]
      }
    }
  },
  {
    "$replaceRoot": {
      "newRoot": {
        "$mergeObjects": [
          "$_id",
          "$$ROOT"
        ]
      }
    }
  },
  {
    "$project": {
      "_id": 0
    }
  }
])