首页 > 解决方案 > 在 Mongo DB 中查找所有具有重复值的对象

问题描述

如何从所有对象name都相同的集合中返回所有对象?

例如在这种情况下name: John

[
 {
   _id: 1,
   name: "John",
   last: "Smith"
 },
 {
   _id: 8,
   name: "John",
   last: "Snow"
 },
 {
   _id: 16,
   name: "John",
   last: "McKay"
 },
]

标签: mongodb

解决方案


您可以使用 group in aggregate 返回所有具有相同名称的数据

db.collection.aggregate([
  {
    "$group": {
      "_id": "$name",
      "orig": {
        "$push": "$$ROOT"
      }
    }
  },
  {
    "$addFields": {
      "sizeOrig": {
        $size: "$orig"
      }
    }
  },
  {
    "$match": {
      sizeOrig: {
        $gt: 0
      }
    }
  },
  {
    $unwind: "$orig"
  },
  {
    "$replaceRoot": {
      "newRoot": "$orig"
    }
  }
])

示例:https ://mongoplayground.net/p/DfTA6_pUaRA

但是如果你想要每个重复的单个数据,你需要按组来做

db.collection.aggregate([
  {
    "$group": {
      "_id": "$name",
      "orig": {
        "$push": "$$ROOT"
      }
    }
  }
])

https://mongoplayground.net/p/hd1z77cdtp0


推荐阅读