【问题标题】:Remove duplicated objects from MongoDB query results从 MongoDB 查询结果中删除重复的对象
【发布时间】:2021-01-17 05:12:09
【问题描述】:

我在 mongo 中有一个由匹配和项目操作组成的聚合管道,结果我有一个对象数组。

结果示例:

[{"pdb_id":"1avy"},{"pdb_id":"1avy"},{"pdb_id":"1lwu"}]

我想删除重复的对象,所以结果应该是:

[{"pdb_id":"1avy"},{"pdb_id":"1lwu"}]

一个可行的解决方案示例是:

 const uniqueArray = result.filter((object,index) => index === result.findIndex(obj => JSON.stringify(obj) === JSON.stringify(object)));

但是当我涉及更多数据时,这会非常慢。您知道更快的解决方案吗?

请考虑结果中的对象也可能具有多个属性。例如:

[{"pdb_id":"1avy", "pdb_chain":"A"},{"pdb_id":"1avy", "pdb_chain":"A"},{"pdb_id":"1lwu", "pdb_chain":"A"}]

需要过滤到:

 [{"pdb_id":"1avy", "pdb_chain":"A"},{"pdb_id":"1lwu", "pdb_chain":"A"}]

【问题讨论】:

    标签: arrays mongodb mongodb-query aggregation


    【解决方案1】:

    如果您希望它在 Mongo 的帮助下完成,除了使用 $group 之外别无选择:

    db.collection.aggregate([
      {
        $project: {
          _id: 0
        }
      },
      {
        $group: {
          _id: "$$ROOT"
        }
      },
      {
        "$replaceRoot": {
          "newRoot": "$_id"
        }
      }
    ])
    

    Mongo Playground

    显然 Mongo 有一些 limits,假设你没有达到 100 mb 的限制,这应该总是更快的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-08
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 2022-11-04
      相关资源
      最近更新 更多