在嵌套数组中找到重复元素的mongo文档的ID

我想从集合中提取文档的id,这些文档具有嵌套在“streetModel”中的数组中的“驱动器”对象的重复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”中,我已经得到了ID为1248969937的重复驱动器对象。

我想创建一个查询到数据库,将返回与这样一个问题(重复的“驱动器”)的所有文档的ID。< br / >

现在我得到了这个:

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的

替换根目录是为了让文档看起来更好,你也可以用$project代替

如果你需要更多的阶段,我认为你可以添加它,例如,获得有这个问题项目的文件,只有docid的

测试代码在这里

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
    }
  }
])
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码