【问题标题】:How to remove duplicate values inside an array in MONGODB?如何在 MONGODB 中删除数组中的重复值?
【发布时间】:2021-11-24 16:45:46
【问题描述】:

个人架构:

[
    {
      "_id": "e6f32800-240e-11ec-b291-51abbaa8f015",
      "firstName": "A",
      "lastName": "Cris",
      "phoneNumber": "111-222-3333",
      "socialMedia": "FaceBook",
      "DOB": "01/01/1990",
      "Theater": 1,
      "__v": 0
    },
    {
      "_id": "e7092b90-240f-11ec-8812-d375202a89ac",
      "firstName": "A",
      "lastName": "Cris",
      "phoneNumber": "111-222-3333",
      "socialMedia": "FaceBook",
      "DOB": "01/01/1990",
      "Theater": 2,
      "__v": 0
    },
    {
      "_id": "e8e78880-240f-11ec-8812-d375202a89ac",
      "firstName": "A",
      "lastName": "Cris",
      "phoneNumber": "111-222-3333",
      "socialMedia": "Twitter",
      "DOB": "01/01/1990",
      "Theater": 3,
      "__v": 0
    },
    {
      "_id": "ee20f750-240f-11ec-8812-d375202a89ac",
      "firstName": "B",
      "lastName": "Hood",
      "phoneNumber": "333-444-5555",
      "socialMedia": "Friends",
      "DOB": "05/05/1993",
      "Theater": 1,
      "__v": 0
    },
    {
      "_id": "76d6ad60-2410-11ec-bc7f-8dbab8f2c871",
      "firstName": "B",
      "lastName": "Hood",
      "phoneNumber": "333-444-5555",
      "socialMedia": "Radio 900 AM",
      "DOB": "05/05/1993",
      "Theater": 2,
      "__v": 0
    },
    {
      "_id": "f053b5d0-240f-11ec-8812-d375202a89ac",
      "firstName": "B",
      "lastName": "Hood",
      "phoneNumber": "333-444-5555",
      "socialMedia": "Radio 900 AM",
      "DOB": "05/05/1993",
      "Theater": 3,
      "__v": 0
    },
    {
      "_id": "79946dd0-2410-11ec-bc7f-8dbab8f2c871",
      "firstName": "C",
      "lastName": "Mohammad",
      "phoneNumber": "555-666-7777",
      "socialMedia": "Radio 104.2 PM",
      "DOB": "10/10/1995",
      "Theater": 1,
      "__v": 0
    },
    {
      "_id": "7b4244e0-2410-11ec-bc7f-8dbab8f2c871",
      "firstName": "C",
      "lastName": "Mohammad",
      "phoneNumber": "555-666-7777",
      "socialMedia": "News",
      "DOB": "10/10/1995",
      "Theater": 2,
      "__v": 0
    },
    {
      "_id": "7d097050-2410-11ec-bc7f-8dbab8f2c871",
      "firstName": "C",
      "lastName": "Mohammad",
      "phoneNumber": "555-666-7777",
      "socialMedia": "News",
      "DOB": "10/10/1995",
      "Theater": 3,
      "__v": 0
    }
]

电影院架构:

[
    {
      "_id": 1,
      "TheaterName": "AMC Katy Mill 20",
      "location": "Katy, TX",
      "__v": 0
    },
    {
      "_id": 2,
      "TheaterName": "AMC First Colony",
      "location": "Sugar Land, TX",
      "__v": 0
    },
    {
      "_id": 3,
      "TheaterName": "AMC Deerbrook",
      "location": "Humble, TX",
      "__v": 0
    }
]

注意:

  1. Individuals 架构中的剧院字段是 _id 的标识符 MovieTheater 架构。
  2. socialMedia 字段是个人了解MovieTheater 的方式

我可以做多少次(计数)个人加入电影院,将所有社交媒体推入一个数组,使用以下方法进行投影:

db.collection.aggregate([
  {
    "$group": {
      "_id": {
        "firstName": "$firstName",
        "lastName": "$lastName",
        "phoneNumber": "$phoneNumber",
        "DOB": "$DOB"
      },
      "count": {
        "$sum": 1
      },
      "socialMedia": {
        "$push": "$socialMedia"
      }
    }
  },
 {
    "$project": {
        "_id.firstName": 1,
        "_id.lastName": 1,
        "Count": 1,
        "socialMedia": 1
    }
 }
])

输出:

[
  {
    "_id": {
      "firstName": "A",
      "lastName": "Cris"
    },
    "Count": 3,
    "socialMedia": [
      "FaceBook",
      "FaceBook",
      "Twitter"
    ]
  },
  {
    "_id": {
      "firstName": "B",
      "lastName": "Hood"
    },
    "Count": 3,
    "socialMedia": [
      "Radio 900 AM",
      "Radio 900 AM",
      "Friends"
    ]
  },
  {
    "_id": {
      "firstName": "C",
      "lastName": "Mohammad"
    },
    "Count": 3,
    "socialMedia": [
      "News",
      "News",
      "Radio 104.2 PM"
    ]
  }
]

但我不知道要删除 socialMedia 中的重复值。

我的预期结果如下:

{
    "_id": {
      "firstName": "A",
      "lastName": "Cris"
    },
    "Count": 3,
    "socialMedia": [
      "FaceBook",
      "Twitter"
    ]
}

非常感谢。

【问题讨论】:

    标签: mongodb mongoose aggregation-framework aggregate-functions


    【解决方案1】:

    使用$addToSet 代替$push 代替socialMedia

    $addToSet

    $addToSet 返回一个包含所有唯一值的数组,这些值是通过将表达式应用于组中的每个文档而产生的。

    db.collection.aggregate([
      {
        "$group": {
          "_id": {
            "firstName": "$firstName",
            "lastName": "$lastName",
            "phoneNumber": "$phoneNumber",
            "DOB": "$DOB"
          },
          "count": {
            "$sum": 1
          },
          "socialMedia": {
            "$addToSet": "$socialMedia"
          }
        }
      },
      {
        "$project": {
          "_id.firstName": 1,
          "_id.lastName": 1,
          "Count": 1,
          "socialMedia": 1
        }
      }
    ])
    

    Sample Mongo Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 2015-09-24
      • 2012-06-05
      • 2011-08-05
      • 2014-07-15
      相关资源
      最近更新 更多